searchresponse elastic java elasticsearch

java - searchresponse - ¿Cómo escribir una prueba para el complemento personalizado de Elasticsearch?



search request elasticsearch java (1)

Para escribir pruebas para su complemento, puede usar Elasticsearch Cluster Runner . Para referencia, compruebe cómo MinHash Plugin escribió la prueba.

ACTUALIZAR:

CustomParserPluginTest clase CustomParserPluginTest para usar 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 archivo es-plugin.properties (pluginrootdirectory / src / main / resources) con el siguiente contenido que obligará a la instancia de elasticsearch a cargar el complemento:

plugin=CustomQueryParserPlugin

Cuando ejecute esta prueba, verá en el resultado que la nueva versión de elasticsearch cargó el complemento.

[2015-04-29 19: 22: 10,783] [INFO] [org.elasticsearch.node] [Nodo 1] versión [1.5 .0], pid [34360], compilación [5448160 / 2015-03-23T14: 30: 58Z] [2015-04-29 19: 22: 10,784] [INFO] [org.elasticsearch.node] [Nodo 1] initializin g ... [2015-04-29 19: 22: 10,795] [INFO] [org .elasticsearch.plugins] [Node 1] loaded [ custom_query ], sites [] [2015-04-29 19: 22: 13,342] [INFO] [org.elasticsearch.node] [Node 1] initialized

[2015-04-29 19: 22: 13,342] [INFO] [org.elasticsearch.node] [Node 1] comenzando ...

Espero que esto ayude.

Creé un plugin Elasticsearch personalizado. Ahora quiero escribir una prueba para este complemento. Mis expectativas eran que podría ejecutar una instancia integrada de Elasticsearch , configurarla correctamente y luego hacer algunas pruebas (indexar algunos documentos, luego consultarlos).

El problema es que no pude configurar mi plugin correctamente

El código de complemento personalizado es analizar la consulta JSON y configurar algunos objetos para su uso posterior:

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)); } }

Código de prueba:

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}}" }

He intentado con múltiples valores para pathToPlugin , pero nada parece funcionar bien, porque la consulta JSON siempre me da una excepción:

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

Toda la documentación que pude encontrar fue sobre la instalación de complementos y probarlos en alguna instalación local de Elasticsearch.

¿Qué estoy haciendo mal aquí? ¿Hay alguna documentación o ejemplos de pruebas como esa?

UPD . Aquí hay un repositorio con el código extraído de CustomQueryParserPlugin - https://github.com/MysterionRise/es-custom-parser

¿Puede estar en la sección de inicialización en la prueba que necesito crear en el índice de memoria?