ElasticSearch:text和keyword的区别、fileds作用、mappings结构对查询的影响

导读:本篇文章讲解 ElasticSearch:text和keyword的区别、fileds作用、mappings结构对查询的影响,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

问题

今天遇到一个问题,一样的代码,在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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!