Подтвердить что ты не робот

Поиск по нескольким индексам в ElasticSearch (Tire)

Крупные веб-приложения предлагают "глобальный" поиск, который объединяет данные из разных полнотекстовых индексов (это будет таблица в SQL), чтобы обеспечить комбинированный результат поиска, упорядоченный по его счету. Так что давайте скажем, что у вас есть видеоролики, статьи в блогах и пользователи, а затем, когда вы вводите "домашний" в поиск, он может давать такие результаты (упорядоченный по результату):

  • Мой дом (статья в блоге)
  • Домашний город (Пользователь)
  • Я хочу вернуться домой (видео)

Кто-нибудь знает, как выполнить такой комбинированный поиск, используя ElasticSearch? Предпочтительно использовать шину Tire для Rails, но также будут работать сырые данные ElasticSearch JSON.

Спасибо.

4b9b3361

Ответ 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