我正在寻找与以下sql查询等效的es java代码:
select from_location,to_location,max(affinity_score)
from prod_affinity
where id = 2620
group by from_location,to_location
order by max(affinity_score)
我在Java中尝试了以下代码段,但无法找到对max(亲和力得分)进行排序的方法。在es java api中按从/到位置对它进行分组之后,因此我必须在代码中手动进行操作。是否可以使用聚合/其他方法在搜索请求本身中容纳这种排序方式?
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0);
searchSourceBuilder.query(QueryBuilders.termsQuery(AbstractEsFields.RankedDocumentV2.ID, idList));
List<CompositeValuesSourceBuilder<?>> sources = new ArrayList<>();
sources.add(new TermsValuesSourceBuilder(AbstractEsFields.RankedDocumentV2.FROM_LOCATION)
.field(AbstractEsFields.RankedDocumentV2.FROM_LOCATION));
sources.add(new TermsValuesSourceBuilder(AbstractEsFields.RankedDocumentV2.TO_LOCATION)
.field(AbstractEsFields.RankedDocumentV2.TO_LOCATION));
CompositeAggregationBuilder compositeAggregationBuilder = new CompositeAggregationBuilder(
AbstractEsFields.RankedDocumentV2.LANE_AGGREGATION, sources).size(10000);
compositeAggregationBuilder
.subAggregation(AggregationBuilders.max(AbstractEsFields.RankedDocumentV2.Affinity_Score)
.field(AbstractEsFields.RankedDocumentV2.Affinity_Score));
searchSourceBuilder.aggregation(compositeAggregationBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = getDocumentsFromEs(esRankedIndentService.getIndexName(), searchRequest); ```