У меня есть документы, содержащие вложенные таблицы в следующем формате:
{
"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
В этом случае я хочу удалить вторую запись "items". Я попытался сделать это с 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, но не смог найти то, что искал. Любая помощь будет принята с благодарностью.