Я создаю пользовательский 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
Может быть, в разделе инициализации в тесте мне нужно создать в индексе памяти?