[英]Elasticsearch: upsert working on older version but not on newer version
I have an upsert query running in bulk. 我有一个批量运行的upsert查询。 Final document is to be stored like this: 最终文件应这样存储:
{
"email": "abc@xyz.com",
"sources": [1,2]
}
Here is the code: 这是代码:
var doc = {
"source": parseInt(id),
"email": email
}
var upsert_query = {
"script": "if (ctx._source.containsKey(\"sources\")) { if (!ctx._source.sources.contains(source)) { ctx._source.sources += source; } } else {ctx._source.sources = [source] }",
"params": {
"source": doc.source
},
"upsert": {
"email": doc.email,
"sources": [doc.source]
}
}
bulkRequestBody.push({"update": {"_index": "my_index", "_type": "email", "_id": doc.email, "_retry_on_conflict": 3}});
bulkRequestBody.push(upsert_query);
The code works perfectly fine on elasticsearch version 1.4 but not working on version 2.1.1. 该代码在Elasticsearch 1.4版上可以正常工作,但在2.1.1版上不能正常工作。
I also tried to restructure my query: 我还尝试重组查询:
var upsert_query = {
"script": {
"inline": "if (ctx._source.containsKey(\"sources\")) { if (!ctx._source.sources.contains(source)) { ctx._source.sources += source; } } else {ctx._source.sources = [source] }",
"params": {
"source": doc.source
}
},
"upsert": {
"email": doc.email,
"sources": [doc.source]
}
}
but still no luck. 但仍然没有运气。 Any help ? 有什么帮助吗?
Scripting needs to be enabled to run scripts like this: 需要启用脚本来运行以下脚本:
in the elasticsearch.yml
file in config, add the following lines: 在config的elasticsearch.yml
文件中,添加以下行:
script.inline: on
script.indexed: on
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.