我有一个要求,我需要根据两个字段进行排序,其中一个字段是日期类型,并且在排序时它将始终有一个值,另一个字段可能为空或可以包含日期值。我需要根据第一个字段按降序对记录进行排序,第二个字段应该为空。我正在寻找 Java Elasticsearch API 的解决方案
SearchRequest('test').source(SearchSourceBuilder() .query(QueryBuilders .boolQuery() .must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("name.keyword","george"))).sort(SortBuilders.fieldSort("createdOn").order(SortOrder.DESC)).sort(SortBuilders.scriptSort(Script("doc['updatedOn'].value == null", ScriptSortType.String)))
最佳答案
此解决方案在我的测试代码 (Elasticsearch-7.6.1) 中有效:
.sort(SortBuilders.scriptSort(new Script(ScriptType.INLINE, "expression", "doc['updatedOn'].empty ? 0 : 1", Collections.emptyMap(), Collections.emptyMap()), ScriptSortBuilder.ScriptSortType.NUMBER).order(SortOrder.DESC))
关于java - 如何使用 Java API 根据多个字段对 Elasticsearch 记录进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62255696/