Elasticsearch: APIの更新:クエリによる更新

作成日 2012年01月12日  ·  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をプラグインとしてパッケージ化しました: yakaz / elasticsearch-action-updatebyquery
楽しむ。

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

:+1 :: pray:

+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は、大量のデータに対して誤って更新が開始された場合に更新を停止する方法を考えていると言います。 停止すると、インデックス付きデータが無効な状態になる可能性があります(ロールバックできる可能性があります...?)。 たぶん、より良いアプローチは間違いを防ぐことでしょう。

実際の一括更新をトリガーする前に2つのHTTP呼び出し(1つは準備し、1つはトランザクションIDを使用して実際にトリガーする)が必要な場合は、更新ステータスハンドラー(SolRのdataimporthandlerなど)を使用して、クエリが実際にいつ行われたかを確認します。

はっきりとはわかりませんが、間違った電話を防ぐための解決策になると思います...

+1

+1

私もこれに賛成したいと思います。

+1

@kimchy :パフォーマンスは問題になりません:現在、データをルックアップするために何千ものクエリを実行しています(たとえば、GPSロケーションのOSMインデックスアドレスルックアップ-ルックアップは高速です、ElasticSearchを取得しました!)そして他のインデックスの各ドキュメントを更新します(たとえば、クリアテキストアドレスを追加します)。 私の更新は新しいフィールドを追加します。 ES内の一括更新は、10.000ルックアップクエリ+ 10.000更新要求(一括更新も使用)よりも効率的である必要があります。 コーディングと実行時の観点からは、より効率的です。たとえば、一括更新ファイルは20.000行を取得し、新機能では2行しかありません。すべてのデータがネットワーク上を移動し、ESが一括更新ファイルの読み取りでビジー状態になります...

更新操作に制限を追加することに同意するかもしれません。たとえば、_update / _query = some_conditions&size = 1000を使用すると、100万のドキュメントを更新できなくなります。開発者は、1000 * 1000の更新を実行して100万のレコードを更新するかどうかを決定できます...別の更新呼び出しが必要な場合に制御できるように、更新されたドキュメントの数を返す必要があります。

+1

私のシナリオ(他のインデックスでのルックアップ後にレコードを強化する)では、別の方法で行うことができます:最初にmongoDbにデータを挿入し、MongoでElasticSearch更新レコードでルックアップを実行し、mongo Riverを使用してElasticSearchで最終結果を取得し、GUIに表示します(ビルドESの上に)。 誰かがそのようなシナリオを経験したことがありますか? 私はESにしか行けないことを望んでいました...今まで、私は自分のプロジェクトでDBを使用することを拒否していました。

こんにちは、

これには、Couchbase + ElasticsearchをCouchbaseとして使用できます。
Elasticsearchとのインターフェースを提供します

心のこもった、
ヤン・バロー

2014年2月3日seti123 [email protected]

私のシナリオ(他のインデックスでのルックアップ後にレコードを強化する)の場合、
別の方法で実行します。最初にmongoDbにデータを挿入し、でルックアップを実行します。
モンゴのElasticSearchアップデートレコード、モンゴリバーを使用して最終結果を取得
ElasticSearchでGUIに表示します(ES上に構築)。 誰かいます
そのようなシナリオを経験しましたか? 私はESにしか行けないことを望んでいました...
今、私は自分のプロジェクトでDBを使用することを拒否しました。

このメールに直接返信するか、Gi tHubhttps://github.com/elasticsearch/elasticsearch/issues/1607#issuecomment-33917801で表示してください

+1

+100

+1

+1

ElasticSearchに代替手段はありますか?たとえば、新しいデータが挿入または更新されたときにアクションを実行するスクリプトをトリガーしますか? Index-Triggerの前のある種の方法で、前処理チェーンを削除できます(ESにデータを挿入する前にREDISと0MQ処理チェーンを使用してメッセージキューを実行しました-すべて、並列処理のためにデータをシャッフルするためにネットワーク帯域幅が必要です... )。

を見たいのですが
http:// localhost :9200 / index / type / _preprocessBeforeIndex?script = myDataAnalysisScript
http:// localhost :9200 / index / type / _preprocessBeforeUpdate?script = myDataAnalysisScript
スクリプトは、ESがレコードを保存/インデックス付けする前に、現在のレコードに新しいフィールドを追加できます(変更後の二重インデックスアクションを回避するため)。 node.jsで多くの作業を行うため、スクリプトは必要な言語(Case JavaScriptの場合)で動作するはずです。

生成されたインデックスではなく、データのタイプごとのMAPPINGでスクリプトを定義できればさらに良いでしょう。
そのようなスクリプトをトリガーできるプラグインはありますか? スクリプトでESAPIを使用するためのドキュメントはありますか?

+1

+1

+1

+1

+1

+1

+1

+1

+1

この機能を待っています...(+ 1)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

この機能は開発中ですか?
これにより、現在アプリケーションレベルで確実に処理することがほとんど不可能な非常に多くの問題が解決されます。

+1

+1

+1

2013年2月中旬以降、プラグインとして@martijnvgブランチを介した「公式プルリクエスト」#2231をパッケージ化して維持していることを思い出してください: yakaz / elasticsearch-action-updatebyquery

+1

+1

+1

+1

+1
2013年2月以降、この機能をマスターにマージしないようにするにはどうすればよいですか?

+1
@KrzysztofWilczekコメントの同上。 なぜPRは更新なしで過去1年間停滞したままになっているのですか? これは、この問題についてこれまでで最もコメントされています。

+1

この問題は数か月前に発生し( @seti1231月/ 2月の投稿を参照)、結果を共有したいと思います
類似点と相違点について読むための良い出発点: https

#2230を優先して閉鎖

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

クエリサポートsetPostFilterによって更新されますか?
発行番号12295

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

誰かがこれをレビューしてフィードバックを与えることができますか?
https://discuss.elastic.co/t/updatebyqueryresponse-throwing-timeout/29176

クエリによる更新は失敗しますが、2,000万以上のレコードを更新します。

@ 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
      }
  }
}'

これが長い間停止し理由は、これらのタイムアウトが原因です。これまで、Elasticsearchで長時間実行されているジョブを起動し、そのステータスや状況を報告する方法がありました。 タスク管理API(#15347)の著名人を使って、「インデックスの再作成」と「クエリによる更新」スタイルのトーチを取り上げ、タスク管理とできるだけ早く統合することを目的として、それらを再開しました。

とにかく、#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での実装が埋め込み用に適切に方向付けられていないことです。 そのため、デフォルトでは含まれていません。

とにかく、それについてもっと話したいのなら、discuss.elastic.coがより適切な場所だと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価