JCh*_*hao 0 elasticsearch elasticsearch-plugin
当我尝试安装我通过调用构建的插件时
./elasticsearch-plugin install file:///fullpath/to/zipfile/custome_plugin.zip
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
ERROR: `elasticsearch` directory is missing in the plugin zip
Run Code Online (Sandbox Code Playgroud)
我正在阅读其他一些类似的帖子,许多人尝试安装 .jar 而不是 .zip。我确实尝试安装 .zip,但仍然显示相同的错误。
此外(可能与此问题无关),当我手动解压缩 zip 文件并将其放入插件文件夹时,elasticsearch-plugins list会列出自定义插件。在这种情况下,插件是一个自定义分析器,但不知何故映射无法识别分析器。是因为我没有正确安装吗?
编辑:
添加一点信息,当我关闭集群然后在插件手动解压缩并放入plugin目录后重新启动时,集群不会启动。我得到了看起来像的错误
[2017-08-31T11:15:52,668][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [] fatal error in thread [main], exiting
java.lang.NoClassDefFoundError: org/elasticsearch/index/analysis/AnalysisModule$AnalysisBinderProcessor
at java.lang.Class.getDeclaredConstructors0(Native Method) ~[?:1.8.0_65]
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) ~[?:1.8.0_65]
at java.lang.Class.getConstructor0(Class.java:3075) ~[?:1.8.0_65]
at java.lang.Class.getConstructor(Class.java:1825) ~[?:1.8.0_65]
at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.java:423) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:387) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:140) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.node.Node.<init>(Node.java:312) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.node.Node.<init>(Node.java:244) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:232) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:232) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:351) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.5.2.jar:5.5.2]
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.index.analysis.AnalysisModule$AnalysisBinderProcessor
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_65]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_65]
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814) ~[?:1.8.0_65]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_65]
... 19 more
Run Code Online (Sandbox Code Playgroud)
好像是这个分析
有没有我遗漏的图书馆?
编辑 2:经过更多的挖掘,我找到了这个网站
http://snacktrace.com/artifacts/org.elasticsearch/elasticsearch/1.7.3/org.elasticsearch.index.analysis.AnalysisModule $AnalysisBinderProcessor$AnalyzersBindings
似乎这AnalyzersBindings仅适用于 ES 1.x 和 2.x (<2.4)?我需要一种方法来替换它。
编辑 3:根据要求,这里是 AnalyzerBinding 最初的使用方式
package org.elasticsearch.plugin.analysis.my.analyzer;
import org.elasticsearch.index.analysis.AnalysisModule;
public class AnalyzerBinderProcessor extends AnalysisModule.AnalysisBinderProcessor {
@Override
public void processAnalyzers(AnalyzersBindings analyzersBindings) {
analyzersBindings.processAnalyzer("my_name", AnalyzerProvider.class);
}
@Override
public void processTokenFilters(TokenFiltersBindings tokenFiltersBindings) {
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的 AnalyzerPlugin.java 我有
public class AnalyzerPlugin extends Plugin {
//some other code here that's not related to Binder
public void onModule(AnalysisModule module) {
module.addProcessor(new AnalyzerBinderProcessor());
}
}
Run Code Online (Sandbox Code Playgroud)
编辑4:这是永无止境的......
如果我保留@Override,它会抛出
[ERROR] /opt/bg/analytics/src/java/src/analyzer5.0/src/main/java/org/elasticsearch/plugin/analysis/my_analyzer/AnalyzerPlugin.java:[16,5] method does not override or implement a method from a supertype
Run Code Online (Sandbox Code Playgroud)
另外,面临一个问题
[ERROR] /opt/bg/analytics/src/java/src/analyzer5.0/src/main/java/org/elasticsearch/plugin/analysis/my_analyzer/AnalyzerPlugin.java:[36,17] onModule(org.elasticsearch.indices.analysis.AnalysisModule) in org.elasticsearch.plugin.analysis.my_analyzer.AnalyzerPlugin cannot override onModule(org.elasticsearch.indices.analysis.AnalysisModule) in org.elasticsearch.plugins.Plugin
Run Code Online (Sandbox Code Playgroud)
因为 overridden method is final
这是从旧Plugin到新的更新吗?我好失落......
我觉得我需要一个关于如何为自定义分析器创建插件的完整教程,到目前为止我能找到的就是这个
这没有多大帮助。有人有好的链接吗?
看起来您已经修复了错误。
但是,我想我会添加我的学习内容,以防有人ERROR: 'elasticsearch' directory is missing in the plugin zip因为我犯的错误而犯同样的错误。
正如 Elasticsearch 文档(https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html)中所述,插件的文件夹名称应在文件夹之前为“elasticsearch”压缩为 zip 文件。
所以,不管zip文件的名字是“elasticsearch-analysis-mecab-ko-5.5.3.0.zip”,压缩前的插件文件夹都应该叫“elasticsearch”。如果文件夹名称不是“elasticsearch”,当您运行 elasticsearch-plugin install 时,您的 elasticsearch 只会给您ERROR: 'elasticsearch' directory is missing in the plugin zip
因此,在创建或修改自定义插件文件夹后,对其进行压缩:
$ zip -r elasticsearch-analysis-mecab-ko-5.5.3.0.zip elasticsearch
然后安装插件
$ ./elasticsearch-plugin install file:///Users/btaek/Desktop/ElasticSearch/elasticsearch-analysis-mecab-ko-5.5.3.0.zip
| 归档时间: |
|
| 查看次数: |
3335 次 |
| 最近记录: |