问题
今天遇到一个问题,一样的代码,在a,b两个环境里运行结果不同,一样的es查询语句,b环境查询结果为空
排查了一下,发现数据也有,就是使用term匹配某个字段时查不到结果,因为之前遇到过类似问题,通过加.keyword解决,这次一试,发现也能出结果了,所以要研究一下原因
分析
1. text和keyword区别
ES5.0及以后的版本取消了string类型,将原先的string类型拆分为text和keyword两种类型
text字段 分词,可用于分词查询(模糊)、全文检索
keyword字段 不分词,可用于精确查询、排序、聚合
2. fields的作用
fields 是一个映射参数,如果主类型是keyword,那就不能分词,要通过设置fields中为text才可以
3. 结构不同对查询的影响
比如字段名为 ZD
主类型是text,映射是keyword
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
term精确查询用 ZD.keyword
match分词查询时用 ZD
主类型是keyword,映射是text
比如是这样的数据
"type": "keyword",
"fields": {
"index_oxye": {
"analyzer": "index_oxye",
"type": "text"
}
}
term精确查询用 ZD
match分词查询时用 ZD.index_oxye
结论
需要使用term精确全词匹配时,
如果es中索引mapping里该字段是typ
e:“text”,filed中再定义type:“keyword”的话,查询中不加keyword会查不到
参考
GET查询,加.keyword与不加.keyword的区别是什么,为什么没有结果
Elasticsearch 映射参数 fields
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93745.html