ES 字段类型设置导致term查询失效问题

问题:

es里面有一个字段存储的数据类似 A、B、H这种大写字母,通过term查询不到数据,但是根据match可以查到,后来发现是因为es字段类型设置的问题,因为设置了该字段类型为text类型,导致es对存储的数据建立了分词索引,大写字母都转成小写了,把类型改为keyword就可以了

设置mapping 字段映射

"fieldName": {
   "type": "keyword"
}

注意问题

1. 通过es提供的测试分词的接口,我们可以测试各字段的分词情况

get http:/ip/索引名称/_analyze
 
{
"field":"firtname", #要进行分析的索引中的字段
"text":"DNF" #要进行分析的文本内容
}

2. ES 字段类型keyword和text的区别和选择

keyword:存储数据时候,不会分词建立索引

text:存储数据时候,会自动分词,并生成索引

创建es索引是最好先设置好每个字段的类型和使用的分词索引,如果不需要分词查询,设置字段类型为keyword最好,例如商品id、编号之类的;

如果需要分词查询,就设置为text类型,并且指定分词器,例如商品名称、商品标签、关键字等等;

设置字段类型和使用的分词器:

"fieldName": {
   "type": "text", #字段类型为text
   "analyzer":"ik_max_word" #ik中文分词器
}

注意:设置字段类型为text后,es建立的分词索引会把大写字母转换为小写,通过term精确匹配就匹配不到


版权声明:本文为Muscleheng原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。