我刚打酱油去了,不好意思

请教一下关于字段分词器的问题

Elasticsearch | 作者 River | 发布于2019年09月26日 | 阅读数:1617

在定义name字段时,我分别定义了:"analyzer": "keyword" 和 "search_analyzer": "ik_max_word",添加了两个doc 值分别为:name = River 和 name = 张三,最后执行查询时,River 这个英文name查询不到,张三 是可以查到,请问这是什么原因呢?
已邀请:

River

赞同来自:

结构和查询结果如图,是索引分词器和查询分词器在中英文上分词不一样产生了冲突的原因?希望能有大佬帮忙解答一下,小白一枚,正在跟着文档学习,谢谢。

River

赞同来自:

这是一个无人区了么 ?!

doom

赞同来自:

analyzer分词器这么写;使用ik_max_word;
          "name":{
            "type": "text",
            "index": true,
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
          }
结果

QQ五笔截图未命名.png


QQ五笔截图未命名2.png

这个问题出在分词器对大小写上: ik_max_word和ik_smart,都会将英文字母转换为小写;然而keyword不转换,所以analyzer用keyword分词后,River会存为River,然后search_analyzer是ik_max_word查询的时候是先将River,转换为river然后去查询,所以没有匹配的结果。
在添加测试用例:存入name为小写的river,然后
GET /userinfo/_search
{
  "query": {
    "match": {
      "name": "River"
    }
  }
}
搜索;此时就可以搜索到;所以,处理这个问题,换分词器:
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
存储的时候最大化的分词,查询的时候就不对获取字段最大化分词;

要回复问题请先登录注册