【发布时间】:2019-01-11 16:01:08
【问题描述】:
我正在使用 dynamic mapping 在 Elasticsearch 中为未知模式的数据编制索引,即我们提前不知道大部分数据的形状、数据类型等。在查询中,我希望能够在任何字段上进行聚合。字符串(由default)映射为text 和keyword 类型,并且只有后者可以聚合。所以对于字符串我的terms aggregations 必须是这样的:
"aggs": {
"something": {
"terms": {
"field": "something.keyword"
}
}
}
但其他类型(如数字和布尔值)没有 .keyword 子字段,因此这些类型的聚合必须如下所示(对于文本字段会失败):
"aggs": {
"something": {
"terms": {
"field": "something"
}
}
}
有没有办法指定一个术语聚合,基本上说“如果something.keyword 存在,则使用它,否则只使用something”,并且不会对性能造成重大影响?
要求在查询时提供数据类型信息对我来说可能是一种选择,但理想情况下我想尽可能避免它。
【问题讨论】:
标签: elasticsearch nest elasticsearch-aggregation