2013-05-25 5 views
1

У меня есть два ElasticSearch серверов:балансировки нагрузки между двумя elasticsearch серверами

http://12.13.54.333:9200 

и

http://65.98.54.10:9200 

В первом сервере у меня 100k данных (id = от 1 до id = 100k) и в на втором сервере у меня есть 100 тыс. данных (id = 100k + 1 до 200k).

Я хочу иметь текстовый поиск по ключевому слову obama по одному запросу на обоих серверах. Это возможно?

+0

Являются ли эти два узла частью одного и того же кластера? – concept47

ответ

7

Ваш вопрос немного общий ... Я постараюсь не дать ответ «это зависит», но для этого мне нужно сделать пару предположений.

Являются ли эти два сервера фактически двумя узлами в одном кластере поиска elasticsearch? Наверное, так.

Вы проиндексировали данные по индексу elasticsearch, составленному из более чем одного осколка? Наверное, так. По умолчанию в elasticsearch есть пять осколков, что в вашем случае приведет к наличию двух осколков на одном узле и три на другом.

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

Чтобы быть более конкретным, фаза поиска на каждом осколке, скорее всего, будет собирать идентификаторы документов и их счет. Как только удаленный узел уменьшит результаты, он может получить все необходимые поля (обычно _source field) только для документов, которые он должен вернуть.

Что хорошего в elasticsearch, так это то, что даже если вы индексировали данные по разным индексам, вы можете запросить несколько индексов, и все будет работать так же, как я описал. В конце дня каждый индекс состоит из осколков, и запрос десяти индексов с одним осколком - это то же самое, что и запрос одного индекса с десятью осколками.

То, что я описал, относится к умолчанию search_type, который использует поиск elasticsearch, называемый query_then_fetch. Существуют другие типы поиска, которые в конечном итоге можно использовать, когда это необходимо, например, счетчик, который не уменьшает и не извлекает, а просто возвращает количество обращений к запросу, выполняющему его на всех осколках, и возвращает сумму всех обращений для каждого осколка.

1

Revendra Кумар,

Elasticsearch должен обработчик, что для вас. Elasticsearch был создан с нуля для распространения и распространения распределенного поиска.

В принципе, если эти серверы находятся в одном кластере, у вас будет два осколка (первый имеет идентификатор от 1 до 100k, а второй - идентификаторы от 100001 до 200k). Когда вы что-то ищете, неважно, на каком сервере он попадает, он будет выполнять поиск на обоих серверах и возвращает результат для клиента. Внутреннее поведение elasticsearch слишком велико, чтобы объяснить здесь.