Json ElasticSearch嵌套数组部分更新
我有一个特殊的对象,它包含my_数组:Json ElasticSearch嵌套数组部分更新,json,search,plugins,
elasticsearch,Json,Search,Plugins,
elasticsearch,我有一个特殊的对象,它包含my_数组: "description": "My Object Description", "my_array": [ { "id": 1000, "name": "abc", "url" : "abc.html", "content": "somebig content" }, { "id": 1001, "name": "def", "url" : "def.html", "content
"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。现在,每当这个对象发生变化时,我都有一个任务,它会点击数组中每个元素的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内容,而不是事先这样做?您不能使用elasticsearch本机API进行此类更新。但是,如果不希望在应用程序级别手动合并更新的内容,一种可能的解决方案是将数组的每个元素存储在一个文档中,该文档的索引与原始文档相同,但类型不同
然后分别对这些元素中的每一个元素(在本例中成为文档)进行更新您不能使用Elasticsearch本机API进行更新。但是,如果不希望在应用程序级别手动合并更新的内容,一种可能的解决方案是将数组的每个元素存储在一个文档中,该文档的索引与原始文档相同,但类型不同
然后分别对这些元素中的每一个元素(在本例中成为文档)进行更新我认为您可以在更新查询中使用脚本解决此问题,请参见以下答案:
我认为您可以在更新查询中使用脚本解决此问题,请参见以下答案:
这可以使用更新Api和动态脚本。这可以使用更新Api和动态脚本。