#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. Да, это верно, вы можете установить порядок по своему усмотрению