根据项目需求需要对搜索词进行IK分词后,然后按照是否可售卖>是否推荐>发布日期进行排序,如下所示
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.multiMatchQuery("酒店","主标题","副标题"));
SearchRequestBuilder searchRequestBuilder = ElasticsearchConfiguration.getInstance().getClient()
.prepareSearch("test")
.setTypes("test")
.setQuery(boolQueryBuilder)
.addSort(SortBuilders.fieldSort(是否可售卖).order(SortOrder.DESC))
.addSort(SortBuilders.fieldSort(是否推荐).order(SortOrder.DESC))
.addSort(SortBuilders.fieldSort(发布日期).order(SortOrder.ASC));
对执行的结果进行核对,发现排序不是自己想要的,而且获得评分为空
ik分词器分词后,然后按照sort设置的字段进行排序,但是此时无法用到分词打分。查阅官网发现分词后的_score可进行排序。意思就是分词后得到的_score可作为一个字段和sort里面的字段一起进行排序
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html
.addSort(SortBuilders.fieldSort(是否可售卖).order(SortOrder.DESC))
.addSort(SortBuilders.fieldSort(是否推荐).order(SortOrder.DESC))
.addSort(SortBuilders.scoreSort().order(SortOrder.DESC))
.addSort(SortBuilders.fieldSort(是否推荐).order(SortOrder.ASC));
实现后可关注下排序,此时应该更加合理了