term搜索keyword中文问题 无法正常搜索到结果

来源:5-4 -字段类查询简介及match-query

吴冠霖

2020-09-04

使用term来搜索keyword的时候查询不到结果
建立的mapping如下
PUT study8
{
“settings”: {
“analysis”: {
“filter”: {
“ITguanlin_ik_synonym_filter”: {
“type”: “synonym”,
“synonyms_path”: “analysis-ik/synonym.txt”
}
},
“analyzer”: {
“ITguanlin_ik_syno”: {
“type”: “custom”,
“tokenizer”: “ik_smart”,
“filter”: [
“ITguanlin_ik_synonym_filter”
]
},
“ITguanlin_ik_syno_max”: {
“type”: “custom”,
“tokenizer”: “ik_max_word”,
“filter”: [
“ITguanlin_ik_synonym_filter”
]
}
}
}
},
“mappings”: {
“user”: {
“dynamic”:false,
“properties”: {
“id”: {
“type”: “integer”
},
“name”: {
“type”: “keyword”
},
“age”: {
“type”: “keyword”
},
“describe”: {
“type”: “keyword”
},
“birthday”: {
“type”: “date”
},
“sex”: {
“type”: “keyword”
},
“native”: {
“type”: “text”,
“analyzer”: “ITguanlin_ik_syno”
}
}
}
}
}
对应的name属性设置的keyword
然后我们添加了一些数据
{“id”:1,“name”:“张三”,“age”:20,“describe”:“张三非常爱吃kfc”,“birthday”:“2015-05-05”,“sex”:“女”,“native”:[“湖南”,“株洲”,“芦淞区”]}
这里就以这一条为例
然后这里我使用的是term来进行搜索
GET study8/user/_search
{
“query”:{
“term”:{
“name”:“张三”
}
}
}
无法搜索出结果
图片描述
然后我通过"张"或"三"来进行搜索
图片描述
通过三来进行查询也能查询出结果,这就很不合理了,首先我的type是keyword类型,不会分词来进行索引,然后我使用term来查询,同样也不会分词应该是使用整个词来进行查询也就是"张三"作为一个词来查询啊,反而查询不到数据,然后我又尝试了英文的数据一切正常,望老师基于解答

图片描述

写回答

1回答

rockybean

2020-09-04

你 GET 你的这个索引 study 看下它的mapping,感觉 name 不是 keyword,是 text+keyword,英文 kfc 即便分词也是一个 term kfc,所以你这个没有问题。但中文默认分词器会分成独立的两个 term,张和三

1
3
rockybean
回复
吴冠霖
not analyzed 是不分词, keyword 是所有输入作为一个 term 词来记录,实际还是分词了。2.x 是要把 analyzer 设为 keyword 就可以了
2020-09-05
共3条回复

Elastic Stack从入门到实践,动手搭建数据分析系统

有了Elastic Stack,不用写一行代码,你也可以玩转大数据分析!

1361 学习 · 397 问题

查看课程