ElasticSearch: разбиение на страницы объединенных результатов из разных источников данных - PullRequest
0 голосов
/ 03 февраля 2020

В ElasticSearch, чтобы получить более релевантные результаты запроса, я собираюсь объединить результаты различных модулей сходства (например, BM25, DFR, DFI и IB).

В идеальном случае я могу сказать, например, α1 * BM25 + ... + α4 * IB в качестве единой оценки релевантности, которая будет рассчитываться в ElasticSearch. Есть ли способ сделать это?

Я знаю о «скриптовом» модуле подобия, но вопрос в том, могу ли я использовать готовые модули сходства и не реализовывать их с нуля как скрипт в формате JSON ? Итак, просто скажите «α1 * BM25 + ... + α4 * IB», где α_i - вес для каждой модели подобия.

Более того, насколько я проверял, нет способа сделать такое вещь в одном индексе (если мы используем предварительно построенные модели сходства), это правда? Я имею в виду, что для каждой модели сходства нам нужен новый индекс тех же данных.

Итак, решение, которое я придумал, состояло в том, чтобы создать несколько индексов с уникальной моделью сходства, получая результаты от каждого из них. , а затем объединить их с функцией F (оценка_1, ..., оценка_4). Это хорошо работает, но мне нужно справиться с разбиением на страницы / сортировкой при объединении результатов из разных модулей сходства.

Учитывая запрос, чтобы получить ответы top-k, мы можем запросить ответы top-k из каждого источника данных. Это нормально для первой страницы результатов, но по мере увеличения номера страницы нам нужно запросить большее количество результатов, чтобы гарантировать, что найденная сумма будет не менее k для этой указанной c страницы, и она показывается / оценивается правильно на основе на (номер страницы и размер страницы - k--). При наличии сортировки необходимо выполнить дополнительную сортировку перед нарезкой (разбивкой на страницы) этого объединенного результата, что делает его еще более неэффективным.

Наивный алгоритм получает достаточное количество результатов из каждого источника данных, объединить их, отсортировать их, а затем нарезать их на основе номера страницы и размера страницы. Есть ли здесь эффективное решение?

...