如何为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}}"

}

我已经为 尝试了多个值-但似乎没有什么效果很好,因为JSON查询总是给我一个例外:

QueryParsingException[[test-index] No query registered for [custom_query]];

我能找到的所有文档都是关于安装插件并在某些本地Elasticsearch安装上对其进行测试。

我在这里做错了什么?是否有类似的文档或测试示例?

。这是一个带有CustomQueryParserPlugin提取代码的仓库-https:

//github.com/MysterionRise/es-custom-

parser

可能在测试中的初始化部分中,我需要在内存中创建索引吗?

回答:

要为您的插件编写测试,您可以使用Elasticsearch Cluster

Runner。作为参考,请检查MinHash插件如何编写测试。

我将CustomParserPluginTest类更改为使用Elasticsearch Cluster Runner:

import static org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.newConfigs;

import java.util.Map;

import junit.framework.TestCase;

import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner;

import org.elasticsearch.action.get.GetResponse;

import org.elasticsearch.action.index.IndexResponse;

import org.elasticsearch.client.Client;

import org.elasticsearch.common.bytes.BytesArray;

import org.elasticsearch.common.settings.ImmutableSettings;

import org.elasticsearch.common.settings.ImmutableSettings.Builder;

import org.elasticsearch.common.xcontent.XContentBuilder;

import org.elasticsearch.common.xcontent.XContentFactory;

import org.elasticsearch.index.get.GetField;

import org.junit.Assert;

import org.elasticsearch.action.search.SearchResponse;

import static org.hamcrest.core.Is.is;

public class CustomParserPluginTest extends TestCase {

private ElasticsearchClusterRunner runner;

@Override

protected void setUp() throws Exception {

// create runner instance

runner = new ElasticsearchClusterRunner();

// create ES nodes

runner.onBuild(new ElasticsearchClusterRunner.Builder() {

@Override

public void build(final int number, final Builder settingsBuilder) {

}

}).build(newConfigs().ramIndexStore().numOfNode(1));

// wait for yellow status

runner.ensureYellow();

}

@Override

protected void tearDown() throws Exception {

// close runner

runner.close();

// delete all files

runner.clean();

}

public void test_jsonParsing() throws Exception {

final String index = "test_index";

runner.createIndex(index, ImmutableSettings.builder().build());

runner.ensureYellow(index);

final SearchResponse test = runner.client().prepareSearch(index).setSource(addQuery()).execute().actionGet();

}

private String addQuery() {

return "{\"match_all\":{\"boost\":1.2}}";

}

}

我创建了es-plugin.properties(pluginrootdirectory \ src \ main \

resources)文件,其内容如下,这将迫使elasticsearch实例加载插件:

plugin=CustomQueryParserPlugin

当您运行此测试时,您将在输出中看到新创建的Elasticsearch实例加载了插件。

[2015-04-29 19:22:10,783] [INFO] [org.elasticsearch.node] [节点1]版本[1.5

.0],pid [34360],内部版本[5448160 / 2015-03-23T14:30: 58Z] [2015-04-29

19:22:10,784] [INFO] [org.elasticsearch.node] [Node 1]初始化… [2015-04-29

19:22:10,795] .elasticsearch.plugins] [节点1]已加载[ ],网站[]

[2015-04-29 19:22:13,342] [INFO] [org.elasticsearch.node] [节点1]已初始化

[2015-04-29 19:22:13,342] [信息] [org.elasticsearch.node] [节点1]开始..

希望这可以帮助。

以上是 如何为Elasticsearch自定义插件编写测试? 的全部内容, 来源链接: utcz.com/qa/418792.html

回到顶部