2016-02-10 4 views
1

Я использую Spark Streaming для агрегирования HTTP-запросов в сеансах HTTP и индексации сеансов в Elasticsearch в режиме upsert на основе идентификатора сеанса. Каждый сеанс содержит роботизированный балл, рассчитанный и обновленный в режиме реального времени. Я хочу распространять роботизированный счет на все HTTP-запросы, принадлежащие к одному и тому же сеансу. У меня есть способ выполнить такое обновление по уже проиндексированным HTTP-запросам в режиме реального времени?Как обновить документы elasticsearch в реальном времени с искровым потоком?

ответ

1

ElasticSearch не поддерживает (в настоящее время) UPDATE WHERE типа запросов.

Вам необходимо сделать это за 2 шага.

  1. Выполните запрос, чтобы получить все документы с определенным идентификатором сессии
  2. Update каждый документ со счетом, используя частичное обновление См https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-updates.html для получения более подробной информации, но перефразировать, что-то вроде

POST /sessions/1/_update { "doc" : { "score": 22 } }

Где 1 в URL - это идентификатор документа, который вы хотите обновить. Операция _update будет сохранять любые существующие поля и просто обновлять оценку (хотя не то, что _update не является строго говоря, так как он создаст новый документ с текущими значениями поля и удалит старый, но для вашего случая это не имеет значения семантика).

+0

Это то, что я делал до сих пор, но нет подходящего способа сделать выборочное обновление существующего индекса. спасибо – ZianyD

+0

Если это ответит на вопрос, можете ли вы отметить его как ответ? BTW, для подтверждения, см. Последнюю строку https://www.elastic.co/guide/en/elasticsearch/reference/current/_updating_documents.html «Обратите внимание, что на момент написания обновления обновления могут выполняться только на одном документе в будущем. В будущем Elasticsearch может предоставить возможность обновлять несколько документов с учетом условия запроса (например, SQL UPDATE-WHERE). " – Amasuriel

Смежные вопросы