Как добавить несколько полей для сортировки лучших хитов в ElasticSearch Java API?

#elasticsearch

#elasticsearch

Вопрос:

Я знаю, что ES поддерживает сортировку лучших хитов по нескольким полям, как sort: ["_score", "datetime"] предложено в этом сообщении: https://discuss.elastic.co/t/top-hits-query-with-same-score/107018

Но как это сделать с помощью Java API?

В AggregationBuilders.topHits().sort() качестве параметра принимается только одно поле.

Должен ли я использовать введите описание изображения здесьand SortBuilder в качестве параметра?

Если это так, SortBuilder запрашивает параметр QueryShardContext, который я не знаю, как создать. Я никогда не использовал его раньше. Ни один из других запросов не использует это QueryShardContext .

Есть ли какой-нибудь простой способ сделать это, например, просто передать массив полей в sort() ?

Заранее спасибо!

Ответ №1:

Существуют перегруженные TopHitsAggregationBuilder.sort() методы, а именно тот, который принимает String name , то есть имя поля, поэтому вы можете сделать это следующим образом:

 TopHitsAggregationBuilder thabuilder = AggregationBuilders.topHits("top");
thabuilder.sort("datetime", SortOrder.DESC);
thabuilder.sort("field2", SortOrder.ASC);
...
  

Все вызовы сортировки добавят новый компонент сортировки в агрегацию лучших просмотров.

Комментарии:

1. Спасибо за ваш ответ. Итак, в вашем примере thabuilder.sort("datetime", SortOrder.DESC); это вступит в силу раньше thabuilder.sort("field2", SortOrder.ASC); , верно?

2. Да, это верно, вы можете установить порядок по своему усмотрению