ES更新到5版本后,取消了 string 数据类型,代替它的是 keyword 和 text 数据类型.那么 text 和keyword有什么区别呢?
添加数据
使用bulk往es数据库中批量添加一些document
1 | POST /book/novel/_bulk |
查看mapping
发现name、author的type是text,
还有个field是keyword,keyword的type是keyword:
查询
使用term查询某个小说:
1 | GET book/novel/_search |
结果是什么也没有查到:
然后使用name的keyword查询:
1 | GET book/novel/_search |
可以查询到一条数据:
实验
使用name不能查到,而使用name.keyword可以查到,我们可以通过下面的实验来判断:
使用name进行分词的时候,结果会有4个词出来:
使用name.keyword进行分词的时候,结果只有一个词出来:
结论
text类型:会分词,先把对象进行分词处理,然后再再存入到es中。
当使用多个单词进行查询的时候,当然查不到已经分词过的内容!
keyword:不分词,没有把es中的对象进行分词处理,而是存入了整个对象!
这时候当然可以进行完整地查询!默认是256个字符!
作者:香山上的麻雀
链接:https://www.jianshu.com/p/1189ff372c38
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。