最近在做一个搜索引擎,需要对文档进行中文分析,默认按照评分排序。
现在需要先按照评分排序,再按照文档时间进行二次排序。 由于评分“_score”是个虚字段,排序时需要特殊处理。
核心代码如下:
SearchResponse searchResponse = client.prepareSearch("test")
.setTypes("doc")
.setQuery(multiMatchQuery)
.addSort(SortBuilders.scoreSort().order(SortOrder.DESC))
.addSort("created",SortOrder.DESC)
.highlighter(highlightBuilder)
.setFrom((pageNum-1)*10)
.setSize(20)
.execute()
.actionGet();
或者
SearchResponse searchResponse = client.prepareSearch("test")
.setTypes("doc")
.setQuery(multiMatchQuery)
.addSort(new ScoreSortBuilder())
.addSort("created",SortOrder.DESC)
.highlighter(highlightBuilder)
.setFrom((pageNum-1)*10)
.setSize(20)
.execute()
.actionGet();
总结: _score排序使用ScoreSortBuilder或者SortBuilders.scoreSort()才能识别Elasticsearch的”_score”字段。