Java小强个人技术博客站点    手机版
当前位置: 首页 >> 软件 >> Elasticsearch配置IK分词器-扩展词库和热更新

Elasticsearch配置IK分词器-扩展词库和热更新

710 软件 | 2022-6-16

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

es.jpg


Elasticsearch Windows上安装 - Java小强技术博客 (javacui.com)

kibana Windows上安装 - Java小强技术博客 (javacui.com)

Elasticsearch配置IK分词器 - Java小强技术博客 (javacui.com)

IK分词器扩展词停用词 - Java小强技术博客 (javacui.com)


配置文件elasticsearch-8.2.2\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">duosuna.dic</entry> -->
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<!-- <entry key="ext_stopwords">stopword.dic</entry> -->
	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">http://localhost:8009/javacui.dic</entry>
	<!--用户可以在这里配置远程扩展停止词字典-->
	<entry key="remote_ext_stopwords">http://localhost:8009/stopword.dic</entry>
</properties>

上面两个扩展词和停用词,可以在和配置文件统计的目录增加dic文件来扩展相关词汇,如果要热更新,就需要下面两个配置,远程词典。


其中 location 是指一个 url,比如 http://yoursite.com/getCustomDict,该请求只需满足以下两点即可完成分词热更新。

该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。

该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

满足上面两点要求就可以实现热更新分词了,不需要重启 ES 实例。

可以将需自动更新的热词放在一个 UTF-8 编码的 .txt 文件里,放在 nginx 或其他简易 http server 下,当 .txt 文件修改时,http server 会在客户端请求该文件时自动返回相应的 Last-Modified 和 ETag。可以另外做一个工具来从业务系统提取相关词汇,并更新这个 .txt 文件。


这里我把dic这个文件放到了本地Nginx,在Nginx的html文件新建一个dic文件夹,然后把dic文件拷贝过来,增加Nginx配置

server {
	listen 8009;
    client_max_body_size 50m;
	root "D:/Soft/nginx/html/dic";
    index index.html;
}


这样ES的IK分词器就会从Nginx拉取词典,修改词典后,IK会在一定间隔后同步该文件。


END 

推荐您阅读更多有关于“ elasticsearch 分词器 ik 扩展 热更新 ”的文章

上一篇:SpringBoot集成Kafka 下一篇:Elasticsearch配置IK分词器

猜你喜欢

发表评论: