请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

使用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回答

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

1 回复 有任何疑惑可以回复我~
  • 提问者 吴冠霖 #1
    查看后发现好像确实是text,长这样
    "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
    首先我在建立Mapping的时候添加的type只添加了keyword也就是说按照我的想法应该是只应该有keyword的属性而不是text+keyword
    “name”: {
    “type”: “keyword”
    },
    老师我还想问一个不成熟的问题 怎么样才能建立一个仅仅是keyword的字段呢,就是我不想让他分词了,我找了一下如果是5.x之前的版本可以使用not_analyzed来设置我这个5.5的版本我试了一下不行,望老师解答
    回复 有任何疑惑可以回复我~ 2020-09-04 22:06:59
  • 提问者 吴冠霖 #2
    已解决,只是不知道自己在什么时候把text和keyword属性都添加上了,重新创建索引添加mapping测试成功
    回复 有任何疑惑可以回复我~ 2020-09-04 23:46:28
  • rockybean 回复 提问者 吴冠霖 #3
    not analyzed  是不分词, keyword 是所有输入作为一个 term 词来记录,实际还是分词了。2.x  是要把 analyzer 设为 keyword 就可以了
    回复 有任何疑惑可以回复我~ 2020-09-05 14:17:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信