解决
在查询的字段名加 .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…