Elasticsearch: Обновить API: обновление по запросу

Созданный на 12 янв. 2012  ·  160Комментарии  ·  Источник: elastic/elasticsearch

1583 позволяет обновлять отдельные документы. Обновление по запросу радикально сократит количество обращений к сети, если вы хотите обновить несколько документов и передать работу от клиента к ES.

curl -XPOST localhost:9200/index/type/_update -d '{
    "query" : { "constant_score" : { "filter" : { "term" : { "counter" : 0 } } } },
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    }
}'
:DistributeCRUD

Самый полезный комментарий

Обновление по запросу доступно в 2.3.0 и 5.0.0-alpha-1. Документы здесь .

Все 160 Комментарий

Мне бы очень понравилась эта функция!

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Мне очень нужна эта функция

: +1:

В ожидании официального завершения и выпуска этой функции я упаковал запрос на перенос № 2231 как плагин:
Развлекайся.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

: +1:: молиться:

+1

+1

Есть ли способ передать оценку запроса в качестве параметра скрипту обновления? Мне нужно обновить записи с оценками, обновленными на основе полей его дочерних элементов.

+1

+1

+1

@ scottc52 У тебя получилось? Я тоже ищу способ сделать это.

+1

@gboivin Нет. Я делаю запрос has_child и отправляю отдельный запрос на обновление, но это медленно.

жду и эту функцию ..

+1

+1

+1

+1

+1

+1

+1

Просто написал небольшой скрипт, чтобы помочь дождаться чего-то ... больше "готово к производству" ;-)

https://github.com/YannBrrd/esNodeUpdater

Не стесняйтесь комментировать / обновлять ...

+1

Есть ли официальный статус этой функции от команды разработчиков? Я не вижу никакой информации от них. Планируется ли добавить эту функцию в ядро ​​или пользователи предпочитают использовать плагин, подобный указанному выше ?

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

+1. Спасибо за обновление и работу над этим.

+1

+1

+1

+1

+1, звучит полезно

+1

+1

+1

+1

+1

+1

+1

+1

+2

+1

+10

+1

+1

+1

Вы когда-нибудь думали реализовать эту функцию с помощью двойного HTTP-вызова? Я думаю о грелках, которые дают возможность сохранить запрос, а затем выполнить его (на самом деле это не одно и то же, но это заставляет меня задуматься).

@kimchy вы говорите, что думаете, как остановить обновление, если оно было запущено на большом количестве данных по ошибке. Если вы его остановите, возможно, индексированные данные будут в недопустимом состоянии (возможно, откат возможен ...?). Возможно, лучший подход - предотвратить ошибку.

Если вам требуются два HTTP-вызова перед запуском реального массового обновления (1 для подготовки и 1 для реального запуска с идентификатором перехода между ними), а затем обработчик состояния обновления (например, обработчик импорта данных в SolR), чтобы узнать, когда запрос действительно выполнен.

Я не уверен, что все ясно, но я думаю, что это может быть решением для предотвращения ошибочных вызовов ...

+1

+1

Я также хочу проголосовать за это.

+1

@kimchy :

Возможно, вы согласны добавить ограничения для операции обновления, например _update / _query = some_conditions & size = 1000, таким образом, он избегает обновления миллиона документов - и мы, как разработчик, можем решить, запускать ли мы 1000 * 1000 обновлений для обновления миллиона записей ... Это должен возвращать количество обновленных документов, чтобы дать некоторый контроль, если требуется еще один вызов обновления.

+1

Для моего сценария (обогащение записей после поиска по другим признакам) я мог бы сделать это другим способом: сначала вставить данные в mongoDb, выполнить поиск в записях обновления ElasticSearch в Mongo, использовать mongo river, чтобы получить окончательные результаты в ElasticSearch, чтобы отобразить их в графическом интерфейсе (сборка поверх ES). Кто-нибудь сталкивался с такими сценариями? Я надеялся, что смогу пойти только по ES ... до сих пор я отказывался от использования БД в моем проекте.

Привет,

вы можете просто использовать для этого Couchbase + Elasticsearch, как Couchbase
предлагает интерфейс с Elasticsearch

Кордиэлемент,
Янн Барро

2014-02-03 seti123 [email protected] :

Для моего сценария (обогащение записей после поиска по другим показателям) я мог бы
сделайте это по-другому: сначала вставьте данные в mongoDb, выполните поиск в
ElasticSearch обновляет записи в Mongo, используйте mongo river для получения окончательных результатов
в ElasticSearch, чтобы отобразить его в графическом интерфейсе (построенном поверх ES). Есть кто-нибудь
сталкивались с такими сценариями? Я надеялся, что смогу пойти ES только так ... пока
теперь я отказался от использования БД в моем проекте.

Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps: //github.com/elasticsearch/elasticsearch/issues/1607#issuecomment -33917801
.

+1

+100

+1

+1

Есть ли в ElasticSearch альтернатива, например, запускать скрипт, который выполняет действие при вставке или обновлении новых данных? Какая-то до того, как Index-Trigger мог помочь мне удалить цепочку предварительной обработки (мы сделали сейчас Message Ques с цепочкой обработки REDIS и 0MQ, прежде чем вставлять данные в ES - все это требует сетевой полосы пропускания, чтобы перетасовать данные для параллельной обработки ... )

Я хотел бы посмотреть
http: // локальный : 9200 / индекс / тип / _preprocessBeforeIndex? script = myDataAnalysisScript
http: // локальный : 9200 / индекс / тип / _preprocessBeforeUpdate? script = myDataAnalysisScript
Скрипт должен иметь возможность добавлять новые поля в текущую запись до того, как ES сохранит / проиндексирует ее (чтобы избежать двойного индексирования после изменений). Поскольку мы много работаем с node.js, скрипты должны работать на требуемом языке (в нашем случае - JavaScript).

Еще лучше, если бы мы могли определить сценарий в MAPPING для каждого типа данных вместо сгенерированных индикаторов.
Есть ли какой-либо плагин, который может запускать такие скрипты? Любая документация по использованию ES API в скриптах?

+1

+1

+1

+1

+1

+1

+1

+1

+1

Жду эту фичу ... (+1)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Эта функция вообще находится в стадии разработки?
Это решило бы так много проблем, с которыми сейчас практически невозможно надежно справиться на уровне приложений.

+1

+1

+1

Напомним, что с середины февраля 2013 года я упаковано, и поддерживали с тех пор, «официальный запрос выдергивать» # 2231 с помощью @martijnvg «s филиала в качестве плагина: Yakaz / elasticsearch-действия updatebyquery .

+1

+1

+1

+1

+1
Как это возможно, чтобы эта функция с февраля 2013 года все еще не была объединена в master?

+1
То же самое с комментарием

+1

У нас возникла эта проблема несколько месяцев назад (см. Мои сообщения как
Хорошая отправная точка для чтения о сходствах и различиях: https://crate.io/blog/crate_data_elasticsearch

Закрыт в пользу № 2230

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

будет обновляться по запросу support setPostFilter?
Выпуск # 12295

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

может кто-нибудь просмотреть это и оставить отзыв.
https://discuss.elastic.co/t/updatebyqueryresponse-throwing-timeout/29176

Обновление по запросу завершается ошибкой при обновлении более 20 миллионов записей.

@ Praveen82, вы используете сторонний плагин. Это не подходящее место для запроса поддержки, вы должны опубликовать это как проблему в репозитории этого плагина.

https://github.com/elastic/elasticsearch/pull/15125 реализует синтаксис, который будет немного похож на

curl -XPOST localhost:9200/index/type/_update_by_query -d '{
    "query" : { "term" : { "counter" : 0 } },
    "script" : {
      "inline": "ctx._source.counter += count",
      "params" : {
          "count" : 4
      }
  }
}'

Причина, по которой это задерживалось

В любом случае, # 15125 и любые последующие PR - это то место, где стоит искать эту функцию.

+1

+1

+1

+1

+1

Обновление по запросу доступно в 2.3.0 и 5.0.0-alpha-1. Документы здесь .

Поддерживает ли обновление по запросу в 2.3. + Или 5. + плагин javascript?

Поддерживает ли обновление по запросу в 2.3. + Или 5. + плагин javascript?

Если ты действительно этого хочешь, конечно. В 2.3+ мы тестируем обновление за запросом на Groovy, а в 5. + мы тестируем на безболезненное. Раньше мы тестировали на groovy, и там он тоже работал. Я ожидаю, что javascript будет работать нормально.

Поддержка JS была бы довольно хорошей.

Поддержка JS была бы довольно хорошей.

Как я уже сказал, он существует, вам просто нужно установить плагин.

Проблема со всеми этими языками заключается в том, что их реализация на JVM не ориентирована должным образом для встраивания. Вот почему мы не включаем его по умолчанию.

В любом случае, если вы хотите поговорить об этом подробнее, я думаю, что более подходящим местом для этого будет Discussion.elastic.co.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги