[英]Spring elasticsearch - retrieve document which has largest value in a field
我正在寻找一种优雅的方法来检索在他的特定领域具有最大价值的文档。 例如,我要检索具有最大时间戳的文档。 我已经尝试过使用聚合,但是我无法使其正常运行,它只会返回一个字段。 我也考虑过使用排序和获取第一个元素,但是我发现这有点蛮力。 这样的查询将类似于:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withPageable(new PageRequest(0, 1))
.withSort(SortBuilders.fieldSort(FIELD_TIMESTAMP)
.order(SortOrder.DESC))
.build();
有没有更好的方法来完成这样的任务?
您可以使用SearchResponse的size()方法获取响应最高的文档。
对于您的查询,应该是这样的:
FieldSortBuilder timestampSort = SortBuilders.fieldSort(FIELD_TIMESTAMP).order(SortOrder.DESC);
SearchResponse response = client.prepareSearch(index)
.addSort(timestampSort)
.setSize(1)
.execute()
.actionGet();
上面的查询将仅返回一个文档,即:查询响应中的第一个文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.