2016-08-24 8 views
2

次の2つのドキュメントとElasticsearchインデックスがあります。Elasticsearch updateByQuery構文の例を探して(ノードドライバ)

[ 
    { 
    "_index": "myIndex", 
    "_type": "myType", 
    "_id": "es1472002807930", 
    "_source": { 
     "animal": "turtle", 
     "color": "green", 
     "weight": 20, 
    } 
    }, 
    { 
    "_index": "myIndex", 
    "_type": "myType", 
    "_id": "es1472002809463", 
    "_source": { 
     "animal": "bear", 
     "color": "brown" 
     "weight": 400, 
    } 
    } 
] 

その後は、あなたがクマについて、この更新されたデータを取得する:

{ 
    "color": "pink", 
    "weight": 500, 
    "diet": "omnivore", 
} 

だから、あなたをクマの "色"と "重量"の値を更新し、 "クマ"の文書に "ダイエット"キーを追加したいとします。

nodejsドライバを使用すると、どのようなupdateByQuery構文で「bear」ドキュメントにこれらの新しい値が更新されるのですか?

(注:この質問は完全にSOコミュニティに、より有用であることが編集されている)

答えて

0

は、次のクエリを使用してそれを行うことができます。クエリによる更新はまだ実験的な機能であることを覚えておいてください。更新前に索引のスナップショットを取得し、一致するすべての文書を更新して戻します。インデックス間ですべてのバージョンのインデックスが変更されると、クエリごとに更新が失敗します。それが更新を実行する任意のスクリプトを持っていないので、

POST /your_index/your_type/_update_by_query?color=green 
{ 
    "query": { 
    "term": { 
     "animal": "bear" 
    } 
    } 
} 

`

詳細については、このドキュメントを経る`

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html

2

は、他の答えは、ポイントが不足しています。

あなたはこのようにそれを実行する必要があります。

POST /myIndex/myType/_update_by_query 
{ 
    "query": { 
    "term": { 
     "animal": "bear" 
    } 
    }, 
    "script": "ctx._source.color = 'green'" 
} 

重要事項:

  • あなたはこれが動作するためにはenable dynamic scriptingに確認する必要があります。あなたがES 2.3以降を使用している場合、アップデート・バイ・クエリ機能がビルトインされて
  • あなたがES 1.7.xまたはあなたがいる場合update-by-query plugin
  • をインストールする必要が旧リリースを使用している場合は
  • ES 2.0と2.2の間で何かを使用している場合、1ショットでこれを行う方法がないので、2回の操作でそれを実行する必要があります。

UPDATEあなたのNode.jsのコードは次のようになります。

、あなたがbodyパラメータ不足している:答えはSOこの他にヴァルによって提供された

client.updateByQuery({ 
      index: index, 
      type: type, 
      body: { 
       "query": { "match": { "animal": "bear" } }, 
       "script": { "inline": "ctx._source.color = 'pink'"} 
      } 
     }, function(err, res) { 
      if (err) { 
       reportError(err) 
      } 
      cb(err, res) 
     } 
    ) 
+0

動的スクリプトが有効になっています 私はES 2を使用しています。3 私はNodejsドライバライブラリ私は実行 使用しています: client.updateByQuery({ インデックス: 'myIndex'、 タイプ: 'MYTYPE'、 "クエリ":{ "マッチ":{ を"動物":、 を }}を "負担"、 "スクリプト": "ctx._source.color = 'グリーン'" }、関数(ERR、RES){ IF(ERR){reportErrorと(ERR)} }) このエラーが発生しました(次のコメントに記載されています): –

+0

Ok 、それはあなたが互換性のESバージョンここで(<=1.7 or > = 2.3) – Val

+0

を持って動作するはずはエラーです: https://kobra.io/#/e/-KPuwAytjSUkU5K_BbFv –

3

を:

How to update a document based on query using elasticsearch-js (or other means)?

ここにはnswer:

var theScript = { 
     "inline": "ctx._source.color = 'pink'; ctx._source.weight = 500; ctx._source.diet = 'omnivore';" 
    } 

    client.updateByQuery({ 
      index: myindex, 
      type: mytype, 
      body: { 
       "query": { "match": { "animal": "bear" } }, 
       "script": theScript 
      } 
     }, function(err, res) { 
      if (err) { 
       reportError(err) 
      } 
      cb(err, res) 
     } 
    ) 
関連する問題