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

问题

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

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值