elasticsearch之ik分词器和自定义词库实现
ElasticSearch分词器
所谓的分词就是通过tokenizer(分词器)将一个字符串拆分为多个独立的tokens(词元-独立的单词),然后输出为tokens流的过程。
例如"my name is HanMeiMei"这样一个字符串就会被默认的分词器拆分为[my,name,is HanMeiMei].ElasticSearch中提供了很多默认的分词器,我们可以来演示看看效果
但是在ElasticSearch中提供的分词器对中文的分词效果都不好。
所以这时我们就需要安装特定的分词器 IK,在https://github.com/medcl/elasticsearch-analysis-ik 下载对应的版本,然后解压缩
因为第一次启动docker容器的时候进行了数据卷的挂载
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
所以直接将解压缩后的包拖到
这个目录下
最后重启es容器
ik分词演示
ik_smart分词
# 通过ik分词器来分词
POST /_analyze
{
"analyzer": "ik_smart"
,"text": "我是中国人,我热爱我的祖国"
}
ik_max_word
POST /_analyze
{
"analyzer": "ik_max_word"
,"text": "我是中国人,我热爱我的祖国"
}
拓展词库和停用词典
在我们使用过程中我们会发现,一些新兴词汇不会被添加到词库中,如:奥里给。。。并且不是所有的词作者在编写分词器时都会知道。还有一些不敏感词汇如“的”,“了”都会被分词,占用了我们一部分内存,所以我们需要停用这些词汇
具体操作如下:
打开shell控制台,找到对应的xml文件,在里面进行相应的修改
然后在config目录下新建ext.dic
直接在里面添加你想要的词汇就行
stopword.dic在config文件夹里面有,就不用新建了,直接打开添加你想要屏蔽的词汇就行
最后重启一下服务
最后测试一下生效了没
能看到确实有效,ok了老铁。还有其他更多的内容去官网上看吧。拜拜了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了