#elasticsearch #spring-data-elasticsearch
#elasticsearch #spring-data-elasticsearch
Вопрос:
У меня есть пользовательский документ, в котором есть различные поля, включая AddressID. Мне нужен список пользователей с другим адресом. Если у двух пользователей одинаковый AddressID, верните любого пользователя и пропустите другого.
Я пытаюсь сгруппировать пользователя по AddressID, но он не работает.
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).
addAggregation(AggregationBuilders.terms("addressId").field("addressId").size(1)).
withPageable(new PageRequest(page, size)).build();
Ответ №1:
Вы захотите добавить список лучших просмотров subaggregation
размером 1. Это вернет один документ (т.Е. Пользователя в вашем случае) на поле AddressID.
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.addAggregation(AggregationBuilders
.terms("addressId")
.field("addressId")
.size(Integer.MAX_VALUE)
.subaggregation(AggregationBuilders.topHits("justOneUserPerAddressId)
.setSize(1)
)
.withPageable(new PageRequest(page, size)).build();
Комментарии:
1. Тем не менее, это не работает. Что такое «justOneUserPerAddressId»??
2. Агрегаты должны иметь «имя», которое может быть любой строкой. Это имя используется для получения результатов агрегирования в ответе поиска.
justOneUserPerAddressId
это имя agg.3. Можете ли вы подробнее рассказать о «не работает»? Это исключение? Что такое json ответа? Что конкретно не работает?
4. Я получаю всех пользователей с одинаковым адресом, это означает, что агрегация не работает
5. Вы смотрите на агрегированную часть ответа? Он появляется в нижней части ответа после всех поисковых запросов.