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

支持7.13 #117

Open
cjdxhjj opened this issue Jul 30, 2021 · 17 comments
Open

支持7.13 #117

cjdxhjj opened this issue Jul 30, 2021 · 17 comments

Comments

@cjdxhjj
Copy link
Contributor

cjdxhjj commented Jul 30, 2021

7.13后权限要求更高了,java.io.FilePermission权限配置被取消,目前官方仅支持config目录的读取,动态自定义词典似乎不可能,自定义字典的cache似乎也不可行
参考:elastic/elasticsearch#69464

@KennFalcon
Copy link
Owner

是的,从7.11开始其实就更新了权限,只有获取读取权限,删除和写入权限都被取消,我也在elasticsearch那边询问相关的解决方式,希望是能给插件自己插件目录的读写权限

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Aug 5, 2021

如果不行,只能提前构建缓存,或只能缓存到内存里了,不使用写的功能,可以定期拉取数据构建内存缓存

@KennFalcon
Copy link
Owner

官方给了我两个修改建议,可以一试,config目录应该是有权限的,elastic/elasticsearch#74275

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Aug 5, 2021

1.自定义词典缓存到内存或在外部生成目标文件
2.周期性使用网络摘取词典

动态词典功能取消或只保存结果到缓存,分二种情况
1.定期拉取自定义词典,词典由外部维护,周期性更新即可
2.自定义词典由插件维护,初始化从网络加载,结果直接构建至内存,并通过网络同步保存

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Aug 5, 2021

config目录官方没有说写入,删除权限,第二个方案是把文件当做文档存储在es里,就像是普通文档一样,这样就可以更新了,不过感觉非常别扭

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Aug 5, 2021

image

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Aug 5, 2021

另一种解决方案是插件运行一个shell或一个prog,可以使用go等语言完成或外部java程序来完成词典的更新

@Whojohn
Copy link

Whojohn commented Nov 8, 2021

插一句话

  • 问题
  1. 从master 拉取代码,7.9 7.11 可以打包,7.13 就不行,这是什么问题呢?
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method javadocJar() for arguments [build_3lc1591po0cn1ffmpvstnktjz$_run_closure3@4a8696d8] on root project 'elasticsearch-analysis-hanlp' of type org.gradle.api.Project.
	at org.gradle.internal.metaobject.AbstractDynamicObject$CustomMissingMethodExecutionFailed.<init>(AbstractDynamicObject.java:190)
	at org.gradle.internal.metaobject.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:184)
	at org.gradle.groovy.scripts.BasicScript$ScriptDynamicObject.methodMissingException(BasicScript.java:162)
	at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:167)
	at org.gradle.groovy.scripts.BasicScript.invokeMethod(BasicScript.java:84)

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Nov 8, 2021

7.13可以打包,但跑不起来,插件需要读取配置文件,写入自定义分词等缓存,但是ES现在禁止读取非配置文件下的文件,禁止写入,导致插件无法使用,作者和ES官方沟通,并没有太好的解决方案

@Whojohn
Copy link

Whojohn commented Nov 9, 2021

7.13可以打包,但跑不起来,插件需要读取配置文件,写入自定义分词等缓存,但是ES现在禁止读取非配置文件下的文件,禁止写入,导致插件无法使用,作者和ES官方沟通,并没有太好的解决方案

可以看看ik怎么做的,现在我的问题更严重,master代码拉下来,改成 只要是 7.11 都打不了包。个人不懂 gradle。但是认为我们可以按照:https://www.viget.com/articles/lets-write-a-dang-elasticsearch-plugin/ 完善一下 gradle的配置。比如引入java_version等。

ps

我大概懂你意思,hanlp 有时候比如我改的源码(自定义特殊符号分割),初始化是需要写入权限,会改变词典,的确是个问题。

@VVeaker
Copy link

VVeaker commented Feb 10, 2022

你好,请问你的问题解决了吗?是什么问题呢?

@muxiaobai
Copy link

追问+1,现在的自定义词典,动态更新,可以不写文件,直接进内存,这种词本身就是本少部分,仅是支持功能,可以动态定义,

@muxiaobai
Copy link

可参考我的fork,v7.16.2,删除了写缓存,启动后不加载reload。hanlp.properties改不会生效

@cjdxhjj
Copy link
Contributor Author

cjdxhjj commented Jun 7, 2022

@muxiaobai 不错,之前一直有这个想法,不过不熟悉nlp, 一直没有付诸实施,你这个版本测试过了吗

@muxiaobai
Copy link

es7.16.2,基于7.5.1 elasticsearch-analysis-hanlp版本,使用原插件,配合新jar包,修改描述信息,可用

@chenzhigang9521
Copy link

插一句话

  • 问题
  1. 从master 拉取代码,7.9 7.11 可以打包,7.13 就不行,这是什么问题呢?
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method javadocJar() for arguments [build_3lc1591po0cn1ffmpvstnktjz$_run_closure3@4a8696d8] on root project 'elasticsearch-analysis-hanlp' of type org.gradle.api.Project.
	at org.gradle.internal.metaobject.AbstractDynamicObject$CustomMissingMethodExecutionFailed.<init>(AbstractDynamicObject.java:190)
	at org.gradle.internal.metaobject.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:184)
	at org.gradle.groovy.scripts.BasicScript$ScriptDynamicObject.methodMissingException(BasicScript.java:162)
	at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:167)
	at org.gradle.groovy.scripts.BasicScript.invokeMethod(BasicScript.java:84)

您好,问下,7.11.0

可参考我的fork,v7.16.2,删除了写缓存,启动后不加载reload。hanlp.properties改不会生效

7.17.1可以么

@Y2k38
Copy link

Y2k38 commented Nov 9, 2024

看来es是铁了心要删掉写权限,高版本没法升级了

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

No branches or pull requests

7 participants