怎么又是你

求教如何在索引阶段禁用大写转小写操作

Elasticsearch | 作者 yeziblo | 发布于2019年08月15日 | 阅读数:2612

各位伙伴好,场景如下:
我现在有一个字段,这个字段可能存储汉字、也可能存储英文字母、数字或它们的组合,我现在使用的是ik_smart,它可以比较好的对付中文,但是对于英文,它基本上是按ES默认的lowercase把英文全部转成小写了。

但是我的查询,对大小写是敏感的,所以有没有什么办法,既可以保留对中文的较好切分,又可以针对英文,唯独禁用小写转化呢(其他的诸如按照空格切这种默认的还是得保留)?

我现在的办法是使用multi fileds,大小写敏感的时候就查keyword,但是总觉得这样挺麻烦,有没有能在索引阶段,通过添加过滤这种方式解决的办法呢?

祝各位身体健康、工作顺利!
已邀请:

bellengao - 博客: https://www.jianshu.com/u/e0088e3e2127

赞同来自: yeziblo

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ik": {
          "type": "ik_smart",
          "enable_lowercase": false
        }
      }
    }
  }
}
基于ik_smart自定义analyzer, 同时配置参数 "enable_lowercase": false

bellengao - 博客: https://www.jianshu.com/u/e0088e3e2127

赞同来自: yeziblo

{
  "settings": {
    "analysis": {
      "char_filter": {
        "charfilter1": {
          "type": "mapping",
          "mappings": [
            ": => -"
          ]
        }
      },
      "tokenizer": {
        "ik_tokenizer": {
          "type": "ik_smart",
          "enable_lowercase": false
        }
      },
      "analyzer": {
        "my_ik": {
          "tokenizer": "ik_tokenizer",
          "char_filter": [
            "charfilter1"
          ]
        }
      }
    }
  }
}

要回复问题请先登录注册