Elasticsearch自定义分词器

本文介绍了为何需要自定义分词器,以满足特定的拼音检索需求。通过示例展示了如何在Elasticsearch中安装和测试拼音分词器,但发现其默认行为并不符合期望。接着,探讨了Elasticsearch中分词器的组成,包括字符过滤器、分词器和过滤器。为了达到基于ik分词器的拼音检索,文章提出了自定义分词器的解决方案,详细解释了自定义分词器的配置参数及其作用。通过自定义分词器,可以实现更精准的拼音检索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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 应该首先启用

 

 结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值