如何为Elasticsearch自定义插件编写测试?
我创建自定义的Elasticsearch插件。现在我想为这个插件写一个测试。我的期望是 - 我可以运行嵌入式Elasticsearch实例,正确设置它,然后做一些测试(索引一些文档,然后查询它)
问题是我无法正确设置插件
自定义插件代码正在解析 JSON 查询并设置一些对象供以后使用:
public class CustomQueryParserPlugin extends AbstractPlugin {
public static final String PLUGIN_NAME = "custom_query";
private final Settings settings;
@Inject
public CustomQueryParserPlugin (Settings settings) {
this.settings = settings;
}
@Override
public String name() {
return PLUGIN_NAME;
}
@Override
public String description() {
return "custom plugin";
}
public void onModule(IndicesQueriesModule module) {
module.addQuery(new CustomQueryParser(settings));
}
}
测试代码:
public class CustomParserPluginTest extends ElasticsearchSingleNodeTest {
private static Node newNode() {
final Settings settings = ImmutableSettings.builder()
.put(ClusterName.SETTING, nodeName())
.put("node.name", nodeName())
.put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0)
.put(EsExecutors.PROCESSORS, 1) // limit the number of threads created
.put("http.enabled", false)
.put("plugin.types", CustomParserPlugin.class.getName())
.put("path.plugins", pathToPlugin)
.put("index.store.type", "ram")
.put("config.ignore_system_properties", true) // make sure we get what we set :)
.put("gateway.type", "none").build();
Node build = NodeBuilder.nodeBuilder().local(true).data(true).settings(
settings).build();
build.start();
assertThat(DiscoveryNode.localNode(build.settings()), is(true));
return build;
}
@Test
public void jsonParsing() throws URISyntaxException {
final Client client = newNode().client();
final SearchResponse test = client.prepareSearch("test-index").setSource(addQuery()).execute().actionGet();
}
private String addQuery() {
return "{"match_all":{"boost":1.2}}"
}
我已经尝试了pathToPlugin的多个值 - 但似乎没有什么工作得很好,因为JSON查询总是给我一个例外:
QueryParsingException[[test-index] No query registered for [custom_query]];
我能找到的所有文档都是关于安装插件并在一些本地Elasticsearch安装上测试它们。
我在这里做错了什么?是否有任何文档或此类测试示例?
UPD。这是一个存储库,其中包含提取的CustomQueryParserPlugin代码 - https://github.com/MysterionRise/es-custom-parser
可能在初始化部分测试我需要在内存中创建索引?