我有一个包含my_array的特定对象:
"description": "My Object Description",
"my_array": [
{
"id": 1000,
"name": "abc",
"url" : "abc.html",
"content": "somebig content"
},
{
"id": 1001,
"name": "def",
"url" : "def.html",
"content": "somebig content"
},
{
"id": 1002,
"name": "xyz",
"url" : "xyz.html",
"content": "somebig content"
} ]
数组中的每个元素都包含一个网址。现在,只要此对象发生更改,我都会执行一个任务,该任务将命中数组中每个元素的url,获取该元素的html内容,并创建可以索引到elasticsearch中的请求文档。
可以说,无法访问id = 1001的url,并且无法访问该元素的内容。我仍然想继续处理元素1000和1002的更改。在这种情况下,我的更新将如下所示:
"description": "My New Object Description",
"my_array": [
{
"id": 1000,
"name": "abc",
"url" : "abc-new-url.html",
"content": "some modified content"
},
{
"id": 1002,
"name": "xyz",
"url" : "xyz-new-url.html",
"content": "some modified content"
} ]
如果我将此部分更新发送给elasticsearch,则该集合将得到更新,但元素1001已从该集合中删除。
我的问题是如何在不触摸1001的情况下选择性地更新元素1000和1002。这里的索引用1001过时对我来说还可以。一个显而易见的选择是从elasticsearch中获取现有文档,并在进行更新之前手动进行合并。还有其他方法可以执行此部分更新吗?
另一个问题是,有什么方法可以只将URL发送到elasticsearch,并编写一个插件来在索引时获取html内容,而不是事先做呢?
最佳答案
我认为您可以在更新查询中使用脚本解决此问题,请在此处查看以下答案:
remove objects from array elastic search
关于json - ElasticSearch嵌套数组部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130297/