Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json ElasticSearch嵌套数组部分更新_Json_Search_Plugins_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Json,Search,Plugins,elasticsearch" /> elasticsearch,Json,Search,Plugins,elasticsearch" />

Json ElasticSearch嵌套数组部分更新

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

我有一个特殊的对象,它包含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": "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和动态脚本。