elasticsearch sort评分

来源:互联网 发布:windows server 2012 编辑:程序博客网 时间:2024/06/01 07:26

根据项目需求需要对搜索词进行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));
实现后可关注下排序,此时应该更加合理了