【问题标题】:Delete nested array in elasticsearch在elasticsearch中删除嵌套数组
【发布时间】:2019-01-11 14:27:19
【问题描述】:

我的文档包含以下格式的嵌套表格:

{
"dataId": "dataIdentifier",
"versionId": "versionIdentifier",
"items": [
{
"obj1": "value1",
"obj2": "value2",
"obj3": "value3",
 },
 {
"obj1": "value4",
"obj2": "value5",
"obj3": "value6"
}, 
{
"obj1": "value7",
"obj2": "value8",
"obj3": "value9" 
}        
]
}

“items”是嵌套类型。我想删除给定的“项目”中的一个元素,而不是其中一个对象具有一定的值。例如:

if (obj1 == "value4" & dataId == "dataIdentifier" & versionId == versionIdentifier) :
    DELETE TABLE ENTRY 

在这种情况下,我想删除“项目”的第二个条目。我尝试用 update_by_query 来做,我的尝试是:

q = {
   "query": {
    "match_all": {}
    }
},
"script": {
    "lang" : "painless",
    "inline" : {if (ctx._source.dataId == item.dataId && ctx._source.versionId == item.versionId && ctx._source.items.obj1 == item.obj1) {ctx._source.items.remove()}}",
    "params" : {
        'dataFrame': [{
            "dataId" : 'myDataIdList',
            "versionId" : 'myVersionId',
            "obj1" : 'myValue'
            } ]
    }
 }    
}

es.update_by_query(index=myindex, body=q)

但我不知道如何在“ctx._source.items.remove()”参数中指定相关条目。我查看了 Elasticsearch 文档,但找不到我想要的东西。任何帮助将不胜感激。

【问题讨论】:

  • 好吧,从概念上讲,我必须更新整个文档,但要实现这一点,是否可以通过查询更新?如果是的话,如何根据该元素的内容删除嵌套数组的元素?

标签: python elasticsearch elasticsearch-py


【解决方案1】:

通过查询更新你不能删除“一个字段”,你可以替换它,为此,你可以用其他两个值更新它你想要维护或删除文档并用这两个索引一个新的价值观

【讨论】:

  • 基于以下链接,我很确定我可以:discuss.elastic.co/t/…。我的问题仍然是在这种精确的情况下如何实现这一点
猜你喜欢
  • 2021-11-30
  • 2018-12-30
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多