ik分词器中suffix.dic后缀词典,一般是怎么使用的呀

来源:7-10 如何应对数据膨胀带来的性能问题

沙漠风暴2635293

2022-07-20

ik分词器中suffix.dic后缀词典,一般是怎么使用的呀,我自己手动在suffix.dic中增加词之后,感觉没有什么作用一样,需求就是我要提取帖子内容中的景点名,然后有个景点叫 理塘,理塘其实也是个镇,然后有人在帖子中写的我到了理塘,有的人写的是我到了理塘镇,我想用自定义分词的方式,将用户不管是写理塘,还是写了理塘镇,都算是一个keyword,我不知道这个需求用suffix.dic实现可以吗,谢谢老师
写回答

1回答

少林码僧

2022-07-21

首先镇这个词已经包含在suffix.dic词典中,不管它在不在词典中,对于ik_max_word而言都是会单独将镇这个词做分词的,ik_max_word是最细粒度的分词,词库中有镇会单独拆分,没有也会单独拆分。

如果想达到你这种索引分词效果,可以这样实现:

1. tokenizer使用ik_smart

2. 在自定义词库中添加理塘和理塘镇这两个词

具体添加方法为:

1. 在config/analysis-ik下新建自定义词库custom.dic

内容如下:

理塘

理塘镇

2. config/analysis-ik/IKAnalyzer.cfg.xml配置文件中增加自己本地扩展词库的路径

修改后的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>

<comment>IK Analyzer 扩展配置</comment>

<!--用户可以在这里配置自己的扩展字典 -->

<entry key="ext_dict">custom.dic</entry>

<!--用户可以在这里配置自己的扩展停止词字典-->

<entry key="ext_stopwords"></entry>

<!--用户可以在这里配置远程扩展字典 -->

<!-- <entry key="remote_ext_dict">words_location</entry> -->

<!--用户可以在这里配置远程扩展停止词字典-->

<!-- <entry key="remote_ext_stopwords">words_location</entry> -->

</properties>



上面改动位置是将

将<entry key="ext_dict"></entry>改为

<entry key="ext_dict">custom.dic</entry>

来指定本地扩展词库的位置


然后重启ES集群进行验证:

POST _analyze

{

  "text": ["我到了理塘镇"],

  "analyzer": "ik_smart"

}


从用户体验来分析,如果用户帖子中出现理塘镇,使用理塘搜索应该也需要能够召回,所以这里可以使用ik_max_word分词,再配合match_phrese,或者match and查询来实现会更合理一些

1
0

海量数据高并发场景,构建Go+ES8企业级搜索微服务

全新 ES8 配合技术组件,实现高性能搜索

267 学习 · 54 问题

查看课程