首页 > 解决方案 > 将值作为键 VS 将它们作为 ElasticSearch 中的嵌套对象数组

问题描述

目前,我有一个弹性搜索索引,该索引的字段具有如下所示的 A、B、C 子字段:

"myfield":{
  "A":{
    "name":"A",
    "prop1":{
      "sub-prop1":1,
      "sub-prop2":2
   },
    "prop2":{}
 },
  "B":{
    "name":"B",
    "prop1":{
      "sub-prop1":3,
      "sub-prop2":8,
      "sub-prop3":4,
      "sub-prop4":7,
   },
    "prop2":{}
 },
  "C":{}
}

可以看出,A 和 B 字段的结构相同,但是 prop1 下的子道具可以是动态的,这意味着根据添加的文档,映射可能会改变,但不是问题,因为 A 和 B 是分开存在的键。但是,正因为如此,我面临另一个问题,即不断添加新文档,由于动态映射,可能存在诸如 A、B、C、D 之类的子道具或子字段……等等继续添加到映射中,这反过来可能导致映射超出index.mapping.total_fields.limit,所以为了避免我打算将“myfield”和“prop1”字段作为对象数组而不是在映射,以便字段 A、B、C... 存储为数组元素,而不是作为新字段不断添加到映射中。

问题是 - 这是一个可行的解决方案以及如何搜索“myfield.A.prop1.sub-prop1”> = 3

新的映射看起来像:

"myfield":[
  {
    "name":"A",
    "prop1":{
      "sub-prop1":1,
      "sub-prop2":2
   },
    "prop2":{}
 },
 {
    "name":"B",
    "prop1":{
      "sub-prop1":3,
      "sub-prop2":8,
      "sub-prop3":4,
      "sub-prop4":7,
   },
    "prop2":{}
 },
 {}
]

标签: elasticsearchluceneelastic-stack

解决方案


推荐阅读