弹性搜索:根据源中的_field获取所有文档ID,并使用新数据更新_field

时间:2018-09-25 16:44:47

标签: java elasticsearch

我想根据字段数据获取弹性搜索库中存在的所有文档ID,并使用新数据更新该字段。

例如: “ _index”:“ conn2”, “ _type”:“ conn2”, “ _id”:“ doc1537857086536”, “ _score”:1 “_资源”: { “ suitename”:“ TestSuite”

我想用“ TestSuite2”替换套件名称,其中对于所有包含“套件名称”的文档ID,套件名称为“ TestSuite”:“ TestSuite”

  • 我尝试使用Update API,因为它需要提及文档ID。

如果我可以使用任何现有的API或任何方法,请帮助我。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用Update by Query API

您的通话将如下所示:

[EDIT]:更新了此调用以使用脚本来更新套件名称字段。

POST conn2/_update_by_query
{
  "script": {
    "inline": "ctx._source.suitename = 'TestSuite2'",
    "lang": "painless"
  },
  "query": {
    "term": {
      "suitename": "TestSuite"
    }
  }
}

或者,您也可以使用_reindex

POST _reindex
{
  "source": {
    "index": "conn2"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": "if (ctx._source.suitename == 'TestSuite') {ctx._source.suitename = 'TestSuite2'}",
    "lang": "painless"
  }
}