Elasticsearch自定义分词器

Posted 黑马程序员官方

tags:

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

一、为什么我们需要自定义分词器

1.1 安装拼音分词器

要实现拼音分词检索,就必须对文档按照拼音分词。在 GitHub 上恰好有 elasticsearch 的拼音分词插件。 地址: https://github.com/medcl/elasticsearch-analysis-pinyin

 yinpin分词器拷贝到es/plugins目录里面

 重启es的容器:

docker restart elasticsearch

测试拼音分词器是否起作用:

POST _analyze 
 
"text": "长隆大马戏", 
"analyzer": "pinyin" 

结果:

 

拼音分词器对我们每一个汉字都解析出对应的中文,但是这个并不是我们所需要的结果,我们需要的结 果基于ik 分词器的基础上的拼音,比如: 长隆大马戏可以分词出马戏, 那么就应该有对应的拼音, maxi。 如果我们需要实现该效果我们则需要自定义分词器。

二、自定义分词器

默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分 词器做个性化定制,形成自定义分词器。

elasticsearch 中分词器( analyzer )的组成包含三部分: character fifilters :在 tokenizer 之前对文本进行处理。例如删除字符、替换字符 tokenizer :将文本按照一定的规则切割成词条( term )。例如 keyword ,就是不分词;还有 ik_smart tokenizer fifilter :将 tokenizer 输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处 理等 文档分词时会依次由这三部分来处理文档:

 

声明自定义分词器的语法如下: 自定义分词器是属于某一个索引库的,并不是全局的 , 代码里面创建的 是my_analyzer 自定义分词器,该分词器会先经过 ik_max_word ,然后经过过滤器,过滤器是拼音分词 器, 拼音分词器设置了一系列的参数:参数说明: keep_full_pinyin 启用此选项时,例如: 刘德华 > [ liu , de , hua ] ,默认值: true keep_joined_full_pinyin 启用此选项时,例如: 刘德华 > [ liudehua ] ,默认值: false keep_original 启用此选项时,也将保留原始输入,默认值: false limit_first_letter_length 设置 fifirst_letter 结果的最大长度,默认值: 16 remove_duplicated_term 启用此选项时,将删除重复的术语以保存索引,例如: de > de 默认:false ,注意:位置相关的查询可能会受到影响 none_chinese_pinyin_tokenize 如果是拼音,则将非中文字母分成单独的拼音词,默认: true,例如: liudehuaalibaba13zhuanghan -> liu , de , hua , a , li , ba , ba , 13 , zhuang , han , 注意: keep_none_chinese 并且 keep_none_chinese_together 应该首先启用

 

 结果

 

以上是关于Elasticsearch自定义分词器的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch03_Mapping字段映射常用类型数据迁移ik分词器自定义分词器

Elasticsearch 如何自定义扩展词库?

ElasticSearch进阶篇之IK分词器和自定义词库实现

ElasticSearch从入门到精通--第七话(自动补全拼音分词器自定义分词数据同步方案)

ElasticSearch学习 ④ IK分词器(elasticsearch插件)+自定义字典

ElasticSearch03_Mapping字段映射常用类型数据迁移ik分词器自定义分词器