0
任何想法如何在elasticsearch 1.7索引上更新多个文档? 我见过2.3的文档,它可以通过查询API调用更新,但我无法更新这个特定的实例,我似乎无法在那里找到这个功能。使用elasticsearch更新多个文档1.7.5
感谢
任何想法如何在elasticsearch 1.7索引上更新多个文档? 我见过2.3的文档,它可以通过查询API调用更新,但我无法更新这个特定的实例,我似乎无法在那里找到这个功能。使用elasticsearch更新多个文档1.7.5
感谢
一般来说,你可以更新Elasticsearch的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为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 config:
script.disable_dynamic: false
script.inline: on
script.indexed: on
嗯,谢谢。我发现该文档。然而,让我们说我有一个标准化的文件,有一个“类别”字段。我需要更新与其匹配的所有文档的类别。有没有办法直接做到这一点,而无需查询它们,然后从结果中编写更新请求?我正在谈论1.000.000以上的文档,因此在php中实现它并不是一件非常便宜的事情。 – overburn
啊好吧。我为你更新了我的答案! – Hansa
谢谢你,我设法做到了。 – overburn