Поиск по нескольким индексам в ElasticSearch (Tire)
Крупные веб-приложения предлагают "глобальный" поиск, который объединяет данные из разных полнотекстовых индексов (это будет таблица в SQL), чтобы обеспечить комбинированный результат поиска, упорядоченный по его счету. Так что давайте скажем, что у вас есть видеоролики, статьи в блогах и пользователи, а затем, когда вы вводите "домашний" в поиск, он может давать такие результаты (упорядоченный по результату):
- Мой дом (статья в блоге)
- Домашний город (Пользователь)
- Я хочу вернуться домой (видео)
Кто-нибудь знает, как выполнить такой комбинированный поиск, используя ElasticSearch? Предпочтительно использовать шину Tire для Rails, но также будут работать сырые данные ElasticSearch JSON.
Спасибо.
Ответы
Ответ 1
относительно Tire существует важное различие: используете ли вы его автономно или в интеграции ActiveRecord/ActiveModel.
В первом случае просто выполните поиск по нескольким индексам Tire.search ['indexA', 'indexB'] do ... end
. Или выполните поиск по всему кластеру, Tire.search do ... end
(эквивалентно curl 'http://localhost:9200/_search?q=*'
).
В последнем случае на данный момент Tire не обрабатывает многомодельные поисковые запросы. Обратите внимание на этот запрос на растяжение: https://github.com/karmi/tire/pull/218 - создайте свой камень с помощью этого патча и помогите проверить решение.
UPDATE
Текущая шина ( > 0,4) может загружать несколько экземпляров модели. См. интеграционный тест, например.
Ответ 2
Я уверен, что конечная точка http://127.0.0.1:9200/_search сделает трюк для вас. Более 99% моих данных находится в одном индексе, поэтому мне сложно проверить это для вас здесь.
Кроме того, проверьте конечную точку многопользовательского поиска: http://www.elasticsearch.org/guide/reference/api/multi-search.html