知道如何在elasticsearch 1.7索引上更新多个文档吗? 我已经看过2.3文档,并且可以通过查询api调用更新,但我无法更新此特定实例,我似乎无法在那里找到此功能。< / p>
由于
答案 0 :(得分:4)
通常,您可以使用Elasticsearch&#39; Bulk API更新多个文档(请参阅1.7。版本文档)。
在这里,您可以看到普通update(通过curl命令)和批量更新之间的区别。
正常更新:
curl -XPOST 'localhost:9200/index1/type1/id1/_update' -d '{
"name" : "updated John"
}
批量更新:
POST /_bulk
{ "update": { "_index": "index1", "_type": "type1", "_id": "id1", "_retry_on_conflict" : 3} }
{ "doc" : {"name" : "updated John"} }
{ "update": { "_index": "index1", "_type": "type1", "_id": "id1", "_retry_on_conflict" : 3} }
{ "doc" : {"name" : "The second update for John"} }
btw:如果您对许多文档进行操作,则最好使用批量请求。这里是详细描述它的docu。
编辑: 要更新与查询匹配的某些文档,您可以使用ElasticSearch Update By Query Plugin for ES 1.7。 顺便说一句:对于较新的ES版本,此功能是内置的:Update By Query API
以下是插件语法的示例:
curl -XPOST 'localhost:9200/index1/_update_by_query' -d '
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"Category": "YourCategoryValueToSearchFor"
}
}
]
}
}
}
},
"script" : "ctx._source.category = \"NewCategoryValue\"; ctx._source.category2 = \"OptionallyUpdateAnotherField\";"
}'
为此,您还必须在elasticsearch.yml配置中启用脚本:
script.disable_dynamic: false
script.inline: on
script.indexed: on