elasticsearch - Elasticsearch中嵌套字段的平均值和直方图聚合

标签 elasticsearch nested aggregation facet

我在Elasticsearch中有一个嵌套的文档,像这样:

{
  {
  "doctxt": "doca",
    "nested": [
      {
        "pos": 1,
        "txt": "terma"
      },
      {
        "pos": 2,
        "txt": "termb"
      },
      {
        "pos": 3,
        "txt": "termc"
      }
    ]
  },
  {
  "doctxt": "docb",
    "nested": [
      {
        "pos": 1,
        "txt": "termd"
      },
      {
        "pos": 2,
        "txt": "terma"
      },
      {
        "pos": 3,
        "txt": "termb"
      }
    ]
  }
}

起作用的聚合查询:

特定字词的总计数(match_all查询,字词txt汇总),结果:
terma: 2
termb: 2
termc: 1
termd: 1

特定字词(在字词txt上进行过滤,在字词txt上进行汇总)的txt方面方面会导致:
terma: termb (2), termc (1), termd (1)
termb: terma (2), termc (1), termd (1)
termc: terma (1), termb (1)
termd: terma (1), termb (1)

我无法使用此文档执行以下操作:

某个特定字词的平均排名(我最终得到了整个嵌套职位的平均值,在这种情况下,对于任何一个字词总是2),预期结果:
terma: 1.5
termb: 2.5
termc: 3
termd: 1

特定术语的直方图(由于上述原因而无法正常工作),预期结果:
terma: pos 1 (1), pos 2 (1)
termb: pos 2 (1), pos 3 (1)
termc: pos 3 (1)
termd: pos 1 (1)

如果我有平面文档(doca-1-terma,doca-2-termb,doca-3-termc,docb-1-termd等),则可以得到预期的结果。这是聚合嵌套文档的限制吗?我应该以平面格式和当前嵌套格式将数据存储两次吗?

最佳答案

不,不是真的。您可以使用nested types实现所需的功能。嵌套类型将使您的嵌套数据单独对待并获得预期的结果。

试试这个要点:https://gist.github.com/vaidik/051a197654fe4b0ecc80

也是read this article about relationships。我认为您可以通过“ parent /子女”文档实现相同的目标,但是我与他们的合作并不多。

关于elasticsearch - Elasticsearch中嵌套字段的平均值和直方图聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24631409/

相关文章:

javascript - 在下一行(新行)中显示嵌套对象属性

elasticsearch - elasticsearch唯一值聚合

Java 嵌套 ifs

hibernate - Grails GORM嵌套的多对多关系查询

elasticsearch - 创建索引映射时未找到分析器

c# - 使用Nest.Net Elasticsearch在C#中建模实体以编写有效的搜索查询

node.js - MongoDB - $merge 可在 Compass 中运行,但不能在 Node.js Lambda 中运行

elasticsearch - elasticsearch 7 中的同义词聚合 - 基于术语

python - 使用 Python 插入 Elasticsearch 数据

elasticsearch - Elastic Search中相同类型的多个字段上的平均值或任何其他聚合