【问题标题】:Elasticsearch aggregation on nested (not array) field嵌套(非数组)字段上的 Elasticsearch 聚合
【发布时间】:2018-10-05 16:39:45
【问题描述】:

关于嵌套字段(不是数组而是简单对象)的聚合,我不太清楚。

让我们考虑一个简单的案例场景,其中我有一个带有语言的嵌套字段 + normalized_name(充当某种 ID)

# index/_mapping
"tags": {
    "type": "nested",
    "properties": {
        "english": {
            "type": "text",
            "analyzer": "english"
        },
        "french": {
            "type": "text",
            "analyzer": "french_light"
        },
        "normalized": {
            "type": "keyword"
        }
    }
},

给定一个搜索查询 Q,我想汇总其标签(英语或法语或规范化)与我的术语完全匹配的文档数量(如果一个文档与多个 fr/en/normalized 嵌套字段匹配,则该文档应仅计算一次,但这并不重要,因为英语/法语/规范化都是不同的区分大小写的方式(但可能不是不区分大小写的方式)并使用他们的tags.normalized作为我聚合的关键。我相信我已经正确完成了过滤,但是我仍然没有得到任何水桶......

以前,当我有一个单一的价值时,我正在做

aggs: {tags: {terms: {field: "tag", size: 1000}}}}} 

当我阅读文档时,我看到许多对嵌套聚合的引用,但它们似乎都是关于聚合内的嵌套聚合,但我只想根据嵌套字段聚合文档计数。我尝试过类似的东西

aggs: {tag_names: {terms: {field: "tags.normalized", size: 100}}

...但它似乎不起作用。我必须使用nested 语法吗?我不想以嵌套聚合的结果结束,只是为了在嵌套字段上聚合......

【问题讨论】:

    标签: elasticsearch elasticsearch-5 elasticsearch-aggregation


    【解决方案1】:

    我的错,经过几次尝试并更清楚地阅读文档后,我意识到 Elasticsearch 的 nested 类型只是“嵌套数组”而不是“嵌套对象”。

    对于嵌套对象,我只需要在我的映射中使用type: :object...在此之后使用aggs: {tag_names: {terms: {field: "tags.normalized", size: 100}} 一切正常

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2015-07-30
      • 2017-09-13
      • 2018-01-12
      • 1970-01-01
      • 2021-04-19
      • 2020-12-21
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多