ES相关(elasticsearch)
远程配置txt文件
增加两个远程txt(http://***)http可以访问的 可以是在nginx中静态文件
分别作为配置远程扩展字典 、远程扩展停止词字典 ,
编写接口需要返回特定header 和 \n格式
- 该 http 请求需要返回两个头部(header),一个是
Last-Modified
,一个是ETag
,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。 - 该 http 请求返回的内容格式是一行一个分词,换行符用
\n
即可。
满足上面两点要求就可以实现热更新分词了,不需要重启 ES 实例。
修改es配置词典
..\elasticsearch-6.3.0\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">extra_main.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典 ( 不进行分词的词)-->
<entry key="ext_stopwords">extra_stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典 (新增的进行分词的词)-->
<entry key="remote_ext_dict">http://127.0.0.1:8080/qryRemoteExtDict</entry>
<!--用户可以在这里配置远程扩展停止词字典 (新增的不进行分词的词)-->
<entry key="remote_ext_stopwords">http://127.0.0.1:8080/qryRemoteExtStopWords</entry>
</properties>
远程词典不生效原因:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:8080" "connect,resolve")
原因: 这种情况是不允许程序向客户端读写文件 所以我们必须人为让客户端授权允许这样的操作。
解决方式:
1:打开 查看jdk:C:\java\jdk1.8.0_311\jre\lib\security\java.policy
2:在以上文件grant内编辑:
permission java.security.AllPermission;
permission java.util.PropertyPermission "G:\\*", "read";
permission java.io.FilePermission "G:\\*", "read,write";
3:打开es的config文件,创建ik-plugin.policy 内容为 以上 内容并新增
permission java.net.SocketPermission "127.0.0.1:8080", "connect,resolve";
4:修改 config 文件下的 jvm.options ,最底下增加
-Djava.security.policy=/home/zshs/dev/elasticsearch-6.3.0/config/ik-plugin.policy
另外做一个工具来从业务系统提取相关词汇, 并更新这个 .txt 文件