我正在使用dynamic mapping在Elasticsearch中索引未知模式的数据,即我们不知道很多数据的形状,数据类型等。在查询中,我希望能够在任何字段上进行汇总。字符串被default映射为text
和keyword
类型,并且只有后者可以聚合。因此,对于字符串,我的terms aggregations必须看起来像这样:
"aggs": {
"something": {
"terms": {
"field": "something.keyword"
}
}
}
但是其他类型(例如数字和布尔型)没有这个.keyword
子字段,因此这些类型的聚合必须看起来像这样(对于文本字段,这将失败):
"aggs": {
"something": {
"terms": {
"field": "something"
}
}
}
是否有任何方法可以指定一个术语聚合,该术语聚合基本上说“如果存在something.keyword
,则使用它,否则仅使用something
”,而不会造成明显的性能损失?
在查询时要求提供数据类型信息可能是我的选择,但理想情况下,如果可能的话,我希望避免这样做。
答案 0 :(得分:1)
如果主要用例是聚合,则可能值得更改string
属性的动态映射以将其索引为keyword
数据类型,并将多字段子字段索引为{{ 1}}数据类型,即dynamic_templates
text