Удалить вложенный массив в asticsearch

У меня есть документы, содержащие вложенные таблицы в следующем формате:

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

С "элементами", являющимися вложенным типом. Я хочу удалить один из элементов внутри заданных "элементов", чем один из элементов внутри имеет определенное значение. Например, это будет:

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, но не смог найти то, что искал. Любая помощь будет принята с благодарностью.

1 ответ

При обновлении по запросу вы не можете удалить "поле", вы можете заменить его, для этого вы можете обновить его двумя другими значениями, которые вы хотите сохранить, или удалить документ и проиндексировать новое с этими двумя значениями.

Другие вопросы по тегам