Я индексирую Pages
, к которому я применяю агрегаты на страницах tags
и authors
, а также разрешаю поиск текста.
В приложении Pages
всегда есть только один author
, но их может быть много tags
. Однако пользователь может фильтровать только по одному tag
за один раз.
Когда пользователь фильтрует по tag
, запрос выглядит следующим образом:
{
query: {
bool: {
must: {
match: { tags: 'Resources' }
}
}
},
aggs: {
tags: {
terms: { field: 'tags' }
},
author: {
terms: { field: 'author' }
}
}
}
И очевидно, что в результате агрегации пересчитываются на основе применяемого фильтра. Итак, у вас есть doc_counts
для tags
, которые доступны в пределах ваших результатов.
например,
Before:
( ) Announcements - 22
( ) Media - 10
( ) Resources - 7
( ) Articles - 5
After:
(*) Resources - 7
( ) Media - 3
( ) Articles - 2
Для семи результатов с 'Ресурсами tag, 3 также помечены как «Media», а 2 также помечены как «Articles». Другими словами, эти итоги показывают объединение, а не общую сумму.
Вот моя проблема - я хочу, чтобы tag
doc_counts
был таким, каким были бы итоги, если бы фильтр не был применено. В идеале вот так:
( ) Announcements - 22
( ) Media - 10
(*) Resources - 7
( ) Articles - 5
Я изучил post_filter
, но это не совсем правильно. Если я возьму свой фильтр из query
и введу его в post_filter
, тогда итоги для моих авторов неверны.
Однако, тогда я получаю такую ситуацию:
( ) Announcements - 22
( ) Media - 10
(*) Resources - 7
( ) Articles - 5
Authors:
( ) James - 22
( ) Lisa - 10
( ) Ashley - 22
Ожидается что-то вроде:
( ) Announcements - 22
( ) Media - 10
(*) Resources - 7
( ) Articles - 5
Authors: (add up to 7)
( ) James - 4
( ) Lisa - 2
( ) Ashley - 1
Если я также включу фильтр тегов в query
, то я вернусь к той же проблеме, что и изначально, где я я не могу получить общие итоги.
По сути, мне нужно, чтобы мой tag
doc_counts
был общим (как в post_filter
), но также ограничен другими фильтрами, которые были применяется.
Есть ли способ сделать это? Я долго искал и проверял документы ES, но я в растерянности.
(Примечание: очевидная возможность - разрешить несколько фильтров для агрегации, например, &tags=Resources+Articles
, а затем итоги по объединению будут иметь смысл ... но это не то, чего хочет клиент).