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