Многоиндексный поиск в ElasticSearch (Tire) - PullRequest
12 голосов
/ 04 марта 2012

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

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

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

Спасибо.

Ответы [ 2 ]

16 голосов
/ 06 марта 2012

относительно Шина , есть важное различие: используете ли вы его отдельно или в интеграции 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 - создайте свой драгоценный камень с применением этого патча и помогите проверить решение.

ОБНОВЛЕНИЕ

Текущий Шина (> 0,4) может отлично загружать несколько экземпляров модели.См., Например, интеграционный тест .

1 голос
/ 06 марта 2012

Я почти уверен, что конечная точка http://127.0.0.1:9200/_search поможет вам.Более 99% моих данных находятся в одном индексе, поэтому мне сложно проверить это здесь.

Кроме того, проверьте конечную точку мульти-поиска: http://www.elasticsearch.org/guide/reference/api/multi-search.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...