如果字段不存在,则 Elasticsearch 更新 API
Posted
技术标签:
【中文标题】如果字段不存在,则 Elasticsearch 更新 API【英文标题】:Elasticsearch Update API if a field does not exist 【发布时间】:2013-04-12 09:32:51 【问题描述】:upsert 的例子是:
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '
"script" : "ctx._source.counter += count",
"params" :
"count" : 4
,
"upsert" :
"counter" : 1
'
如果该文档以前不存在,则有效。
假设我想更新一个不一定存在但文档存在的字段。 例如,文档可能还没有计数器字段。
我该怎么做?
【问题讨论】:
【参考方案1】:您可以使用更新脚本检查字段是否存在:
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '
"script" : "if( ctx._source.containsKey(\"counter\") ) ctx._source.counter += count; else ctx._source.counter = 1; ",
"params" :
"count" : 4
,
"upsert" :
"counter" : 1
'
【讨论】:
太棒了!您是否碰巧知道是否有一些网站可以真正解释 MVEL 语言?我尽力学习它,但找不到任何像样的资源。 mvel.codehaus.org/Language+Guide+for+2.0 太可怕了,几乎什么都没有 这是我所知道的最好的资源。我的建议是安装 javascript plugin 并切换到 javascript 作为您的脚本语言。 来自 elasticsearch 关于脚本语言的文档:The scripting module uses by default groovy (previously mvel in 1.3.x and earlier)
以上是关于如果字段不存在,则 Elasticsearch 更新 API的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch 字段数据存在,但用term查询搜索不到指定的数据
django - 如果一个或多个字段不存在则不断言的 Q 对象