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
    }
  ]
}

测试分词

这里写图片描述

搜索数据

拼音搜索

这里写图片描述

在做分词时遇到的问题

问题和解决

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

去看下 Ik 的配置文件发现:
这里写图片描述

修改 路径 和 xml 结构 错误之后,重新加载了配置文件:
这里写图片描述

停止词/分词效果

查看口红的 的搜索效果。发现搜索到了 含有 这个字的结果
这里写图片描述

查看 口红 的 分析器结果,发现 口红过多 的分词了
这里写图片描述

修改 ik.stop.txt 添加 “口” 和 “红”
这里写图片描述

elastic 重新加载了 ik 分词配置文件
这里写图片描述

再次查看分析器效果,再去搜索 口红的 ,已经搜不到 的对应结果了
这里写图片描述

再比如:马卡龙 会被 拆分成 ,添加 ik.txt 就可以让分析器按自己的词语来拆分
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值