es 聚合提示 Fielddata is disabled on text fields by default.

mac2026-05-19  6

解决

在查询的字段名加 .keyword

如原来的字段名为 xxxx.xxxxx 则在查询时指定字段名为 xxxx.xxxx.keyword

背景

ES新手一枚,查询数据时报错如题

网上查了一通之后,发现大多是如下文: es进行聚合操作时提示Fielddata is disabled on text fields by default

可惜我是新手,上文的方案应该是完美且正确的解决方案,但是貌似是在 mapping 上进行操作,于是我就接着查,查啊查,查到了下文: GET查询,加.keyword与不加.keyword的区别是什么,为什么没有结果 也就是本文的解决办法。

原因

对于es而言,新的版本取消了 string 类型,拆分类型为 text 和 keyword 两种类型。

那前面提到的mapping是什么呢?反正就是类似于一个映射,指定类型的东西,没有指定怎么办?动态猜测呗。所以 "12" 认为是 long ,"192.168.0.1" 认为是 ip 类型。

看下区别,也就知道为什么要加 keyword 了:

对 text 类型的字段会先做分词处理之后再匹配,所以做 term 查询是得不到结果的,而 keyword 则是对结果做精确匹配,可以进行 term 聚合

今天是2019-11-02号,周末,小雨,学习 & 加班 ing…

最新回复(0)