java - 如何使用 Java API 根据多个字段对 Elasticsearch 记录进行排序?

标签 java elasticsearch elasticsearch-java-api

我有一个要求,我需要根据两个字段进行排序,其中一个字段是日期类型,并且在排序时它将始终有一个值,另一个字段可能为空或可以包含日期值。我需要根据第一个字段按降序对记录进行排序,第二个字段应该为空。我正在寻找 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/

相关文章:

elasticsearch - 如何使用MultiMatchQueryBuilder为每个字段设置提升?

java - 有没有办法打印JDBC执行的所有SQL语句?

使用 random_score 的 elasticsearch 会降低性能

elasticsearch - 每日清理索引的未知来源

elasticsearch - 如何从Elasticsearch过滤stromcrawler数据

java - Elasticsearch Must_not 不使用过滤器子句

java - ElasticSearch 存储桶聚合

java - Camel xpath toLowerCase 并包含

java - 如何使用 AngularJS 使用 war 名称发送请求?

java - 在单个作业中将自定义对象从Map传递到Reduce