Elasticsearch2.3.4分词插件开发
0. Elasticsearch的版本是2.3.4 首先你得有自己的一Analyzer和Tokenizer,可以参考前面的一篇文章 1. pom.xml 使用maven来构建项目,需要包含elasticsearch的依赖,否则编译不了 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.3.4</version> <scope>provided</scope> </dependency> 然后es的plugin需要一个描述文件plugin-descriptor.properties,把这个文件放在src/main/resources这个目录,打包后安装到es里面就会出现在插件目录下了。这个文件需要写入下面的内容: description=${project.description} version=${project.version} name=${elasticsearch.plugin.name} site=${elasticsearch.plugin.site} jvm=${elasticsearch.plugin.jvm} classname=${elasticsearch.plugin.classname} java.version=${elasticsearch.plugin.java.version} elasticsearch.version=${elasticsearch.version} 这些才使用了maven在pom.xml定义的内容,直接定义在pom.xml的根路径下: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <elasticsearch.plugin.name>elasticsearch-analysis-demo</elasticsearch.plugin.name> <elasticsearch.plugin.site>false</elasticsearch.plugin.site> <elasticsearch.plugin.jvm>true</elasticsearch.plugin.jvm> <elasticsearch.plugin.java.version>1.8</elasticsearch.plugin.java.version> <elasticsearch.version>2.3.4</elasticsearch.version> <elasticsearch.plugin.classname>org.elasticsearch.plugin.AnalysisDemoPlugin</elasticsearch.plugin.classname> </properties> 最重要的就是plugin-descriptor.properties里面的classname,也就是pom.xml定义的elasticsearch.plugin.classname节点里面的类名,这个类就是es加载plugin的入口。 2. 继承Plugin 现在来看Java代码,分词插件入口类需要继承org.elasticsearch.plugins.Plugin类,并实现三个方法: public String name() 返回插件名字 public String description 返回插件的描述 public void onModule(AnalysisModule model) 可以使用model这个AnalysisModule对象添加自定义的分词器 上代码: package org.elasticsearch.plugin; import com.lexiscn.elasticsearch.hylanda.HylandaAnalysisBinderProcessor; import org.elasticsearch.index.analysis.AnalysisModule; import org.elasticsearch.plugins.Plugin; public class AnalysisDemoPlugin extends Plugin { public static String PLUGIN_NAME = "elasticsearch-analysis-demo"; @Override public String name() { return PLUGIN_NAME; } @Override public String description() { return PLUGIN_NAME; } public void onModule(AnalysisModule model) { model.addProcessor(new HylandaAnalysisBinderProcessor()); } } 在model.addProcessor这个方法调用的时候,需要一个org.elasticsearch.index.analysis.AnalysisModule.AnalysisBinderProcessor对象。所以还需要实现一个继承处AnalysisBinderProcessor的类: ...