elasticsearch ik 分词器动态词典

环境准备

  • docker 安装的 es,并且安装了 ik 分词器
  • docker 安装的 kibana
  • docker 安装的 nginx

如果以上软件未安装,可以移步以下教程:

IK 分词器配置文件

ik 分词器是默认支持远程词典和热跟新的

我们打开 分词器的配置文件,可以看到以下内容

配置文件路径:plugins/ik/config/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"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

从配置文件可以看出,前两项分别配置本地静态的包含词典和排除词典,但是修改这两项需要重启 es,不是很方便,不推荐使用

后两项很明显就是我们需要远程词库配置

ngxin 实现词库功能

我们 nginx 配置一个静态资源目录

# 配置一个支持 HTTP 协议的服务
server {

    listen 80;
    server_name  localhost;
    location / {
        root /usr/share/nginx/www;
        index index.html;
	}
}

在 www 目录下创建两个文:

包含词典:remote_ext_dict.txt

排除词典:remote_ext_stopwords.txt

分别在两个文件中写入词语,一行一个词语,格式如下

白嫖
奥利给
给力

地址栏输入地址查看是否能访问:

http://ip/remote_ext_dict.txt 如:http://192.168.200.100/remote_ext_dict.txt

http://ip/remote_ext_stopwords.txt 如:http://192.168.200.100/remote_ext_stopwords.txt

确定能访问后,将两个地址配置到 ik 分词器的配置文件,修改配置文件如下

<?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"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">http://192.168.200.100/remote_ext_dict.txt</entry>
	<!--用户可以在这里配置远程扩展停止词字典-->
	<entry key="remote_ext_stopwords">http://192.168.200.100/remote_ext_stopwords.txt</entry>
</properties>

重启 es 容器

docker restart es

查看重启日志

docker logs -f es

从日志可以看出我们的远程词典已经被加载了

image-20220316233635691

我们尝试在文件里面在加入一个词,实验热跟新是否生效

白嫖
奥利给
给力
嘤嘤怪

可以看到,等待不到一分钟,我们的新加入的词语 “嘤嘤怪”也被加入了

image-20220316233821356

使用 kibana 客户端查看是否真的生效

发送分词请求,查看是否生效

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "嘤嘤怪白嫖给力的教程,奥利给"
}

从下图可以看出,我们加入的词语都生效了,并且 “的” 这种无意义的词语也被排除了

image-20220316235115522

扩展

这里笔者使用 nginx 静态资源的方式配置,实际应用中,我们完全可以采用 web 动态项目,实现两个接口,一个返回包含词典,一个返回排除词典,每次从数据库中查询

这样我们就能实现一个界面,让用户随意的修改词典了

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值