elasticsearch 在ElasticSearch中将值作为键与将值作为嵌套对象数组进行比较,elasticsearch,lucene,elastic-stack,elasticsearch,Lucene,Elastic Stack" /> elasticsearch 在ElasticSearch中将值作为键与将值作为嵌套对象数组进行比较,elasticsearch,lucene,elastic-stack,elasticsearch,Lucene,Elastic Stack" />

elasticsearch 在ElasticSearch中将值作为键与将值作为嵌套对象数组进行比较

elasticsearch 在ElasticSearch中将值作为键与将值作为嵌套对象数组进行比较,elasticsearch,lucene,elastic-stack,elasticsearch,Lucene,Elastic Stack,目前,我有一个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,

目前,我有一个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":{}
 },
 {}
]

为什么不将这些存储在单独的文档中?您是否在A.X和B.X上有带条件的查询,或者您只按名称查询名称,所以是独立的?使用当前的建模,您将遇到性能问题。字段A、B、C。。。是任何文档中都可能存在的属性。目前,它们作为键添加到“myfield”下,因此每当在新文档中遇到新字段时(例如有a、C、D),映射就会变得更大。为了避免这种情况,我正在寻找一些通用的东西,比如对象数组,这样它就可以在不改变映射的情况下保存任何新字段。但是这样,我不知道如何跨所有数组元素(对于A、B、C…)执行搜索。如果myfield是嵌套字段,则搜索将正常(第二个映射)。要获得更多帮助,我们必须知道每个文档中预期的最大字段数(可搜索字段)、字段大小以及查询方式。根据这一点,可以使用父子模型,也可以使用不同的表示(例如,从prop开始,使用dictionnay)。如果在sub-prop中只有数字,我不会在sub-prop部分中添加字段,例如,添加另一个嵌套字段。如果props字段没有X个不同的映射,可以使用类似的方法将它们存储为嵌套子列表。应该更干净、更快(因为您不必在子属性的映射中添加48984个字段,而只需添加5-6个字段)。“prop”:[“name_prop”:“type_prop”:“value_int”:“value_str”:“value_datetime”:,…]是的,我在周末查阅了一些文档,决定对这些字段也使用嵌套类型。谢谢你的建议。