Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

手动解压hanlp插件到${ES_HOME}/plugins,需要将${hanlp_home}/config目录拷贝到${ES_HOME}/config/analysis_hanlp目录下 #95

Open
guluo2016 opened this issue Nov 11, 2020 · 6 comments · May be fixed by #126

Comments

@guluo2016
Copy link

问题

我通过解压hanlp zip包到plugins目录下的方式去安装该插件,安装后重启,发现报错如下:
hanlp错误信息

通过分析发现,在加载hanlp插件的时候,是去${ES_HOME}/config目录下加载hanlp.propertieshanlp-remote.xml文件,源代码如下:

private Dictionary(Configuration configuration) {
       //去${ES_HOME}/config下的analysis_hanlp目录下加载配置文件
       Path configDir = configuration.getEnvironment().configFile().resolve(AnalysisHanLPPlugin.PLUGIN_NAME);
       Predefine.HANLP_PROPERTIES_PATH = configDir.resolve(CONFIG_FILE_NAME).toString();
       logger.debug("hanlp properties path: {}", Predefine.HANLP_PROPERTIES_PATH);
       DictionaryFileCache.configCachePath(configuration);
       DictionaryFileCache.loadCache();
       RemoteDictConfig.initial(configDir.resolve(REMOTE_CONFIG_FILE_NAME).toString());
}

解决办法

第一种
将${hanlp_home}/config目录拷贝到${ES_HOME}/config/analysis_hanlp目录下,重启ES集群
第二种
修改代码,将加载hanlp配置文件的路径修改为${hanlp_home}/config

 private Dictionary(Configuration configuration) {
        # 从${hanlp_home}/config目录下加载
        Path hanlpPluginConfigDir = configuration.getEnvironment().pluginsFile().resolve(AnalysisHanLPPlugin.PLUGIN_NAME + "/config");
        Predefine.HANLP_PROPERTIES_PATH = hanlpPluginConfigDir.resolve(CONFIG_FILE_NAME).toString();
        logger.debug("hanlp properties path: {}", Predefine.HANLP_PROPERTIES_PATH);
        DictionaryFileCache.configCachePath(configuration);
        DictionaryFileCache.loadCache();
        RemoteDictConfig.initial(hanlpPluginConfigDir.resolve(REMOTE_CONFIG_FILE_NAME).toString());
    }
@jackeylu
Copy link

是的,我使用的是7.2版本的ES和hanlp插件,存在同样的问题。

希望可以采用第二种的方法,方便ES的docker容器环境运行。

@KennFalcon
Copy link
Owner

最好采用elasticsearch-install方式安装

@faeli
Copy link

faeli commented Jun 7, 2021

@KennFalcon @jackeylu @guluo2016
我也遇同样的问题,通过 elasticsearch plugin install 本地文件安装的 7.10.2 ,希望采用 将配置文件统一归并到
/usr/share/elasticsearch/plugins/analysis-hanlp/config 插件目录中

@lopaz
Copy link

lopaz commented Nov 19, 2021

我也是安装的7.10.2,在Debian上用安装包装的,碰到同样的问题。elasticsearch-plugin install analysis-hanlp安装是把插件配置文件装到了/etc/elasticsearch/analysis-hanlp目录下,而实际读取的时候却读的是/usr/share/elastcisearch/config/analysis-hanlp目录。
最后是手动把文件拷贝过去解决的。

#补充,又观察了一下,日志里还是会周期性的报错:access denied ("java.io.FilePermission" "/usr/share/elastcisearch/config/analysis-hanlp/hanlp-properties" "read")。文件实际上是存在的,权限都设置成了777
还有,一定要建一个用到了hanlp的索引,不然好像日志里不会报错

#再补充,经反复测试,
发现是新版的plugin-security.policy配置还有问题:
// HanLP data directories
删除 permission java.io.FilePermission "plugins/analysis-hanlp/data/-", "read,write,delete";
删除 permission java.io.FilePermission "plugins/analysis-hanlp/hanlp.cache", "read,write,delete";
添加 permission java.io.FilePermission "<>", "read,write,delete";
在/etc/elasticsearch/jvm.options中添加:
-DHANLP_ROOT=/usr/share/elasticsearch/plugins/analysis-hanlp
-Djava.security.policy=./plugins/analysis-hanlp/plugin-security.policy
另外,再改一下插件目录的属主:
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/analysis-hanlp
做完以上步骤,服务启动基本就没有任何报错了。
另外:hanlp.properties的权限问题也是security.policy导致的,只要建个软链接到/usr/share/elastcisearch/config/analysis-hanlp/hanlp-properties就行了。

@guluo2016
Copy link
Author

@lopaz 我根据你的描述又基于7.10.2自测了下,验证了几点:

  • plugin-security.policy文件中的内容不用修改,也没有问题
  • jvm.options中需要添加 -DHANLP_ROOT=/usr/share/elasticsearch/plugins/analysis-hanlp 即可,这点最好再README文档中说明一下 @KennFalcon
  • es还是会从${ES_HOME}/config/analysis-hanlp中加载配置,这个地方应该修改,否则在es.log中还是会存在error错误

@xuyuntian
Copy link

xuyuntian commented Nov 11, 2022

也碰到同样的问题是 7.10.1(用es按照插件的方式安装)
按照 @lopaz 的方式
在/etc/elasticsearch/jvm.options中添加:
-DHANLP_ROOT=/usr/share/elasticsearch/plugins/analysis-hanlp
-Djava.security.policy=./plugins/analysis-hanlp/plugin-security.policy
另外,再改一下插件目录的属主:
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/analysis-hanlp

最后创建软链,启动成功

ln -s /etc/elasticsearch/analysis-hanlp /usr/share/elasticsearch/config/analysis-hanlp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants