2017-06-23 22 views
0

私は既に多くの文書でいっぱいの索引を持っています。
インデックス内のすべてのドキュメントには、name文字列フィールドがあります。
name = Aのすべてを照会して更新し、name = Bに設定したいとします。ドキュメントによると、elasticsearch APIで
UPDATE FROM table SET name = 'B' WHERE name = 'A';elasticsearch _update_by_queryを使用して文字列フィールドを更新するにはどうすればよいですか?

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

私はこのクエリを試してみました:

POST my_index/_update_by_query 
{ 
    "script": { 
    "inline": "ctx._source.name = 'B'", 
    "lang": "painless" 
    }, 
    "query": { 
    "term": { 
     "name" : "A" 
    } 
    } 
} 

しかしSQLにそれはようなものになるだろう。明確にするため

、何も変更されていないことを返します。私はまだname = Aの文書を見つけることができるので、編集されていません。

{ 
    "took": 1, 
    "timed_out": false, 
    "total": 0, 
    "updated": 0, 
    "deleted": 0, 
    "batches": 0, 
    "version_conflicts": 0, 
    "noops": 0, 
    "retries": { 
    "bulk": 0, 
    "search": 0 
    }, 
    "throttled_millis": 0, 
    "requests_per_second": -1, 
    "throttled_until_millis": 0, 
    "failures": [] 
} 

なぜ私の_update_by_queryは何もしませんか?

答えて

2

は私の文字列フィールドが分​​析フィールドだった、それを見つけたので、私はこのような試合クエリを使用する必要があります。

POST my_index/_update_by_query 
{ 
    "script": { 
    "inline": "ctx._source.name = 'B'", 
    "lang": "painless" 
    }, 
    "query": { 
    "match": { 
     "name" : "A" 
    } 
    } 
} 
関連する問題