【问题标题】:Elastic search aggregation buckets remain empty弹性搜索聚合存储桶保持为空
【发布时间】:2019-02-22 06:29:33
【问题描述】:

自从更新到 ES 6.4 后,我的聚合返回空存储桶。这是聚合的样子:

"measurements": {
            "terms": {
                // This decides the number of buckets
                "size": 20,
                "field": "measurements.raw"
            }
        },
        "part_type": {
            "terms": {
                "size": 20,
                "field": "part_type.raw"
            }
        }

这曾经完美地工作过。这部分的映射是:

"parts": {
    "properties": {
       "measurements": {
           "type": "text",
           "fields": {
               "keyword": {
                   "type": "keyword",
                   "ignore_above": 256
                   }
                 }
               },
               "part_type": {
                   "type": "text",
                   "fields": {
                       "keyword": {
                           "type": "keyword",
                           "ignore_above": 256
                                }
                            }
                },
 },

不知何故,存储桶仍然是空数组,我似乎无法弄清楚为什么。现在查询中有错误。

查询搜索返回的示例数据是:

 {
            "_index": "certificates",
            "_type": "certificate",
            "_id": "56a74f7c5dee788d0c3bc86f",
            "_score": 1,
            "_source": {
                "certificate_number": "A10288",
                "certificate_type": "3.1B",
                "norm": "",
                "material_quality": "904L",
                "manufacturer": "BLABLA",
                "bb_code": "xxx",
                "attached_file": {
                    "originalname": "",
                    "filename": ""
                },
                "parts": [
                    {
                        "measurements": "Ø73.02x5.16",
                        "charge_number": "442665",
                        "probe_number": "",
                        "part_type": "ELBOW",
                        "comment": "",
                        "factory_code": "",
                        "_id": "56a74f7c5dee788d0c3bc870",
                        "mcl_order_number": [
                            {
                                "number": "43.9.069"
                            }
                        ]
                    }
                ],
                "created_by": {
                    "user_name": "System import"
                },
                "__v": 0
            }
        }

我尝试根据 6.4 文档重写以使其看起来像这样:

aggregations = {
    "parts": {
        "terms": {"field": "parts"},
        "aggs": {
            "measurements": {
                "terms": {"field": "parts.measurements.raw"}
            },
            "part_type": {
                "terms": {"field": "parts.part_type.raw"}
            },
        }
    }
}

这将返回以下内容:

"aggregations": {
    "parts": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": []
    }
}

【问题讨论】:

  • 你之前用的是什么版本?
  • 2.3.我现在尝试这样做:“parts”:{“terms”:{“field”:“parts”},“aggs”:{“measurements”:{“terms”:{“field”:“parts。 measure.raw"} }, "part_type": { "terms": {"field": "parts.part_type.raw"} }, } } 但是桶仍然是空的。
  • 我用更多信息更新了这个问题。

标签: elasticsearch aggregate elasticsearch-aggregation


【解决方案1】:

从 2.3 到 6.4 的升级是相当大的,发生了很多变化。如果您有时间,我强烈推荐 Elastic 文档的Breaking Changes 部分。它至少会让你大致了解这些重大变化。至少查看主要版本 5 和 6。

现在,我认为 5.0 对映射进行了更改。一些限制,对默认行为的一些更改。我猜在您的情况下,您正在使用动态映射;意思是你自己没有指定映射?

如果我正确阅读了您的映射,那么您想参考聚合中的字段 measurements.keyword 和 measurements.part_type.keyword 字段。 raw 字段未指定,可能引用 2.x 中的旧默认值。

这是最可能的原因:5.0 mapping changes

【讨论】:

  • 感谢 Slomo,这成功了:aggregations = { "measurements": { "terms": { // 这决定了桶的数量 "size": 20, "field": "parts.测量值.keyword”,“缺失”:“N/A”}},“part_type”:{“terms”:{“size”:20,“field”:“parts.part_type.keyword”,“missing”:“不适用" } } }
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 2018-06-24
  • 2017-09-25
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
相关资源
最近更新 更多