У меня есть поисковый индекс, содержащий товары разных каталогов. Теперь, когда я ищу заданный поисковый термин, довольно часто возвращаются результаты, подобные следующему:
Catalog 1 - Product 1
Catalog 1 - Product 2
Catalog 1 - Product 3
...
Catalog 1 - Product x
Catalog 2 - Product 1
...
Это не оптимально, так как я хочу также указать пользователю на другие каталоги, не имея его просматривать на нескольких страницах результатов поиска, содержащих все товары одного и того же каталога. Поэтому я попытался использовать diversified_sampler-aggregation , который вместе с дочерним элементом top_hits-aggregation казался именно тем решением, которое я хочу:
POST /myIndex/_search?typed_keys=true
{
"query": {
"query_string": {
"fields": [
"title^2",
"description^2",
"descriptionOriginal^0.01"
],
"query": "*someSearchTerm*"
}
},
"size": 0,
"aggs": {
"aggDiversifiedSampler": {
"diversified_sampler": {
"shard_size": 100000,
"field": "catalogId",
"max_docs_per_value": 3
},
"aggs": {
"aggTopHits": {
"top_hits": {
"from": 0,
"size": 50,
"sort": [
{
"_score": {
"order": "desc"
}
}
]
}
}
}
}
}
}
Разбиение на страницы осуществляется через свойства "size" и "from" внутренней агрегации top_hits. Результаты поиска могут быть получены из коллекции значений внутреннего top_hits-агрегата - поэтому я установил размер самого запроса равным 0.
На первый взгляд это работает - на первый взгляд, но с При более внимательном рассмотрении результатов выясняется, что возвращаются не все результаты поиска. Результаты теперь выглядят так:
Catalog 1 - Product 1
Catalog 1 - Product 2
Catalog 1 - Product 3
Catalog 2 - Product 1
Catalog 2 - Product 2
Catalog 2 - Product 3
...
Catalog x - Product 1
Catalog x - Product 2
Catalog x - Product 3
... и затем все заканчивается.
Кажется, что diversified_sampler не деформируется после достижения последнего каталога и так далее результаты из отдельных каталогов не появятся. Я хочу что-то вроде этого:
Catalog 1 - Product 1
Catalog 1 - Product 2
Catalog 1 - Product 3
Catalog 2 - Product 1
Catalog 2 - Product 2
Catalog 2 - Product 3
...
Catalog x - Product 1
Catalog x - Product 2
Catalog x - Product 3
Catalog 1 - Product 4
Catalog 1 - Product 5
Catalog 1 - Product 6
Catalog 2 - Product 4
Catalog 2 - Product 5
Catalog 2 - Product 6
...
Есть идеи? Моя техника с использованием diversified_sampler не увенчалась успехом, но я не мог придумать что-то еще. Может, какая-нибудь причудливая сортировка запроса на основе сценариев? Не знаю Переупорядочение на основе клиента не вариант, потому что я не хочу, чтобы упругая поисковая подкачка была нарушена. Мне нужна страница, чтобы поддерживать производительность - поисковый индекс составляет около 18 ГБ, содержащий 900 тыс. Документов ...