聚合后的排序es springboot

时间:2020-05-13 18:14:20

标签: java spring-boot elasticsearch

我正在寻找与以下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); ```

0 个答案:

没有答案