未知数据类型的Elasticsearch术语聚合

时间:2018-08-03 18:13:57

标签: elasticsearch nest elasticsearch-aggregation

我正在使用dynamic mapping在Elasticsearch中索引未知模式的数据,即我们不知道很多数据的形状,数据类型等。在查询中,我希望能够在任何字段上进行汇总。字符串被default映射为textkeyword类型,并且只有后者可以聚合。因此,对于字符串,我的terms aggregations必须看起来像这样:

"aggs": {
    "something": {
        "terms": {
            "field": "something.keyword"
        }
    }
}

但是其他类型(例如数字和布尔型)没有这个.keyword子字段,因此这些类型的聚合必须看起来像这样(对于文本字段,这将失败):

"aggs": {
    "something": {
        "terms": {
            "field": "something"
        }
    }
}

是否有任何方法可以指定一个术语聚合,该术语聚合基本上说“如果存在something.keyword,则使用它,否则仅使用something”,而不会造成明显的性能损失?

在查询时要求提供数据类型信息可能是我的选择,但理想情况下,如果可能的话,我希望避免这样做。

1 个答案:

答案 0 :(得分:1)

如果主要用例是聚合,则可能值得更改string属性的动态映射以将其索引为keyword数据类型,并将多字段子字段索引为{{ 1}}数据类型,即dynamic_templates

text