我正在寻找一种优雅的方法来检索在他的某个领域中具有最大价值的文档。 例如,我想检索具有最大时间戳的文档。 我尝试过使用聚合,但是我无法让它工作,它只会返回一个字段。 我也考虑过使用排序和获取第一个元素,但我发现有点暴力。这样的查询就像:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withPageable(new PageRequest(0, 1))
.withSort(SortBuilders.fieldSort(FIELD_TIMESTAMP)
.order(SortOrder.DESC))
.build();
有没有更好的方法来完成这样的任务?
答案 0 :(得分:3)
您可以使用SearchResponse的size()方法获取响应最高的文档。
对于您的查询,它应该是这样的:
FieldSortBuilder timestampSort = SortBuilders.fieldSort(FIELD_TIMESTAMP).order(SortOrder.DESC);
SearchResponse response = client.prepareSearch(index)
.addSort(timestampSort)
.setSize(1)
.execute()
.actionGet();
以上查询将只返回一个文档,即:查询响应中的第一个文档。