Elasticsearch 5.5.1 中文/拼音分词 亲测有效

所有不说明elastic 版本的博客都是耍流氓 。 ——某码农

原文链接

版本如题。拼音和中文分词一起的整个测试流程如下:

预备 删除 index

DELETE /index_name/
{
}

创建一个 index_name 的 index

PUT /index_name/
{
    "index": {
        "analysis": {
            "analyzer": {
                "ik_pinyin_analyzer": {
                    "type": "custom",
                    "tokenizer": "ik_max_word",
                    "filter": ["my_pinyin", "word_delimiter"]
                }
            },
            "filter": {
                "my_pinyin": {
                    "type": "pinyin",
                    "first_letter": "prefix",
                    "padding_char": " "
                }
            }
        }
    }
}

修改 type 的 mapping

PUT /index_name/app/_mapping
{
    "app": {
        "properties": {
            "ProductCName": {
                "type": "keyword",
                "fields": {
                    "pinyin": {
                        "type": "text",
                        "store": false,
                        "term_vector": "with_positions_offsets",
                        "analyzer": "ik_pinyin_analyzer",
                        "boost": 10
                    }
                }
            },
            "ProductEName":{  
                "type":"text",  
                "analyzer": "ik_max_word"  
            },
            "Description":{  
                "type":"text",  
                "analyzer": "ik_max_word"  
            }
        }
    }
}

创建测试数据

PUT /index_name/app/1
{
  "ProductCName":"口红世家",
  "ProductEName":"Red History",
  "Description":"口红真是很棒的东西呢"
}

测试拼音分词效果

POST /index_name/_analyze?pretty
{
  "analyzer": "pinyin",
  "text":"王者荣耀"
}

{
  "tokens": [
    {
      "token": "wang",
      "start_offset": 0,
      "end_offset": 1,
      "type": "word",
      "position": 0
    },
    {
      "token": "wzry",
      "start_offset": 0,
      "end_offset": 4,
      "type": "word",
      "position": 0
    },
    {
      "token": "zhe",
      "start_offset": 1,
      "end_offset": 2,
      "type": "word",
      "position": 1
    },
    {
      "token": "rong",
      "start_offset": 2,
      "end_offset": 3,
      "type": "word",
      "position": 2
    },
    {
      "token": "yao",
      "start_offset": 3,
      "end_offset": 4,
      "type": "word",
      "position": 3
    }
  ]
}

测试分词

Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第1张图片

搜索数据

拼音搜索

Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第2张图片

在做分词时遇到的问题

问题和解决

配置完成之后发现分词不生效,查看 elastcsearch 启动日志发现 如下错误:
这里写图片描述

去看下 Ik 的配置文件发现:
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第3张图片

修改 路径 和 xml 结构 错误之后,重新加载了配置文件:
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第4张图片

停止词/分词效果

查看口红的 的搜索效果。发现搜索到了 含有 这个字的结果
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第5张图片

查看 口红 的 分析器结果,发现 口红过多 的分词了
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第6张图片

修改 ik.stop.txt 添加 “口” 和 “红”
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第7张图片

elastic 重新加载了 ik 分词配置文件
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第8张图片

再次查看分析器效果,再去搜索 口红的 ,已经搜不到 的对应结果了
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第9张图片

再比如:马卡龙 会被 拆分成 ,添加 ik.txt 就可以让分析器按自己的词语来拆分
Elasticsearch 5.5.1 中文/拼音分词 亲测有效_第10张图片

你可能感兴趣的:(ElasticSearch)