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了老铁。还有其他更多的内容去官网上看吧。拜拜了
标签:词汇,自定义词,ik,elasticsearch,分词器,分词,es From: https://www.cnblogs.com/wjzohou/p/18245759