Учитывая ваш вопрос, я считаю, что вы смотрите на elasticsearch 1.0, на данный момент доступный в Beta2. Эта деталь важна, поскольку перколятор был переписан в 1.0 и выглядит совершенно по сравнению с тем, который доступен в 0.90.
Обычно вы используете перколятор для регистрации запросов, которые сохраняются. Затем вы можете перкотировать документ, чтобы узнать, сколько запросов оно соответствует, без фактической индексации.
Что нужно многим людям - это дополнительный шаг по индексированию документа, поэтому приятно иметь возможность выполнять перколяцию и индексирование в одном запросе, чтобы вы могли индексировать документ и возвращать запросы, которые он соответствует. Это было возможно в 0,90 с использованием так называемого перколята при индексировании. Это единственная функция, которая была удалена с помощью перезаписи 1.0, чтобы иметь возможность лучше распределять зарегистрированные запросы и масштабировать их.
Фактически, с 0.90 запросы хранятся в зарезервированном индексе, который называется _percolator
, который всегда имеет 1 осколок и auto_expand_replica
установлен на true
. Это означает, что каждый узел будет содержать все запросы, так как один осколок будет автоматически реплицироваться на все узлы. Основная причина этого заключается в том, что, когда вы хотите индексировать документ и перколить в одно и то же время, чтобы сделать это перфомантом, вам нужно убедиться, что два осколка, которые вам нужно ударить (запросы и данные), являются на том же узле. Если все запросы находятся на всех узлах, это гарантируется, таким образом, перколяция, тогда как индексирование возможно и будет достаточно быстрым. Но есть большое ограничение, поэтому перколятор был переписан: существует ограничение на количество запросов, которые вы можете зарегистрировать, так как они попадут в один осколок.
С 1.0 вы можете регистрировать запросы по любому индексу, и они будут зарегистрированы под зарезервированным типом .percolator
. Затем вы можете масштабировать с запросами, так как они находятся в нормальном индексе, и вы можете определить количество осколков. Недостаток заключается в том, что у вас нет целой копии запросов на каждом узле, тем самым просачиваясь, а индексация невозможна.Что вы можете сделать, хотя, что эквивалентно, но состоит из двух запросов является:
- индексировать документ
- percolate the existing document по идентификатору, без необходимости отправить весь документ еще раз
Шаг 2 может быть выполняется сразу после возврата операции индекса, так как она выполняет внутреннюю операцию get by id, которая работает в режиме реального времени, поэтому нет необходимости ждать или обновлять индекс.
Если вы имеете в виду перколяцию при индексировании, это возможно с 0.90, но удаляется с новым перколятором в master (1.0). Причиной удаления является то, что это большая часть, которая препятствовала распределению перколятора в 0.90, так как вам нужны как запросы, так и документы в одном и том же узле, чтобы они были работоспособными. Имеет смысл? – javanna
Да, я имел в виду перколяцию при индексировании. Было бы неплохо, если бы это сработало. Я не знаю достаточно о внутренности elasticsearch, чтобы посмотреть, как обрабатываются индексы, и почему хорошо, что перколятор находится где-то еще в качестве документов. Я только начинаю использовать elasticsearch, и я создаю концентратор журналов с поддержкой уведомлений. Значение, основанное на согласованных входящих событиях/журналах, я могу инициировать обратные вызовы, чтобы вызвать некоторые вещи. У меня такое ощущение, что делать 2 запроса на каждое событие может быть слишком много, и мне нужен другой сототон. –