【问题标题】:How to add a field into an Elastic Search document with an array of objects value?如何将字段添加到具有对象值数组的 Elastic Search 文档中?
【发布时间】:2021-03-04 16:33:56
【问题描述】:

我正在使用 Elastic Search 5.6,我想在现有文档中添加一个新字段。该字段的值应该是数组类型。我可以通过发送带有以下正文的 POST 请求来添加带有字符串数组的新字段

{"script" : "ctx._source.new_field = ['string1', 'string2']"}

到我的终点

http://localhost:9200/my_index/my_mapping/item_173969/_update

并验证了新字段是否存在,但我需要将此键的值设置为 对象数组。我怎样才能做到这一点?具体来说,我需要我的文档:

"size": [
    {
        "item_size": "XL",
        "country_size": "US"
    }
]

【问题讨论】:

  • 如果对您的问题有用,请记住将答案标记为正确,或者如果您需要其他任何内容,请告诉我

标签: arrays elasticsearch search


【解决方案1】:

你快到了。我正在使用忽略文档类型的 ES 7.1,但脚本部分应该可以工作。

提取数据

PUT test_david/_doc/1
{
  "name": "doc1"
}

更新文档

POST test_david/_update/1
{
  "script": {
    "source":  "if (!ctx._source.containsKey('sizes')) ctx._source.sizes= new ArrayList(); ctx._source.sizes.add(params.data);",
    "params": {
      "data": {
        "item_size": "XL",
        "country_size": "US"
      }
    }
  }
}

请注意,这将验证文档是否已创建属性大小并向其添加新大小。

查询

POST test_david/_search

回应

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test_david",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "doc1",
          "sizes" : [
            {
              "country_size" : "US",
              "item_size" : "XL"
            }
          ]
        }
      }
    ]
  }
}

关于嵌套类型

仅当您希望保留相同子项的属性之间的关系以进行查询时,才使用嵌套类型。

对象字段类型可以进行如下搜索:

“item_size 和/或 item_country 在任何尺寸对象上”

嵌套字段类型搜索,例如:

“item_size 和/或 item_country 在相同尺寸的物体上”

并非所有嵌套字段都必须是嵌套类型。仅当您需要保持相同子项的属性之间的关系以进行查询时,因为嵌套类型更昂贵,并且如果您只是存储和显示数据,则使用这种类型的字段没有意义。

【讨论】:

    猜你喜欢
    • 2020-03-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2016-01-23
    • 2020-04-28
    • 2022-07-25
    • 2020-05-21
    相关资源
    最近更新 更多