elasticsearch 拼音搜索

Posted 阿里路亚的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch 拼音搜索相关的知识,希望对你有一定的参考价值。

现在很多公司都开始使用es来做搜索,我们公司目前也有好几个业务部门在用,我主要做商户搜索,为业务部门提供基础支持。上周把呼叫中心的搜索重新整理了下,在新增几个字段后,全量同步发现通过拼音首字母搜索无法搜索出来了,最后发现是词库地址变更,导致分词出现了问题。

我整理了下es的搜索分词插件和流程,如下:

1. 下载安装分词插件 https://github.com/medcl/elasticsearch-analysis-ik 

修改 IKAnalyzer.cfg.xml 配置加载自己的远程扩展词库,我的词库由于一次机房迁移导致地址失效了,但是一直都没有发现是因为大部分商户数据并没有更新,分词索引必须要在数据更新时才会被重建!

 

2. 下载安装拼音插件 https://github.com/medcl/elasticsearch-analysis-pinyin

 

创建索引

curl -XPUT http://127.0.0.1:9200/demo/ -d‘{
"settings" : {
      "index" : {
          "analysis": {
             "analyzer": {
                 "ik_smart_pinyin": {
                     "tokenizer": "ik_smart",
                     "filter": [
                         "my_pinyin",
                         "lowercase",
                         "word_delimiter"
                     ]
                 },
                 "ik_max_word_pinyin": {
                     "tokenizer": "ik_max_word",
                     "filter": [
                         "my_pinyin",
                         "lowercase",
                         "word_delimiter"
                     ]
                 }
             },
             "tokenizer": {
                 "ik_smart": {
                     "type": "ik_smart",
                     "use_smart": "true"
                 },
                 "ik_max_word": {
                     "type": "ik_max_word",
                     "use_smart": "false"
                 }
             },
             "filter": {
                 "my_pinyin": {
                     "type": "pinyin",
                     "first_letter": "all"
                 }
             }
         }
      }
}}

 

curl -XPUT http://127.0.0.1:9200/_analyze?analyzer=ik_smart_pinyin&text=望湘园

{
    "tokens": [
        {
            "token": "wang",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "xiang",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "yuan",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "wxy",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 3
        }
    ]
}

 

"token": "wxy" 就是首字母

以上是关于elasticsearch 拼音搜索的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch-高级搜索(拼音|首字母|简繁|二级搜索)

Elasticsearch 分布式搜索引擎 -- elasticsearch-analysis-pinyin 拼音分词器的安装和介绍

ElasticSearch搜索引擎安装配置拼音插件pinyin

Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器自定义分词器自动补全查询实现搜索框自动补全)

Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)

Elasticsearch:Pinyin 分词器