Я использую Elasticsearch 2.4 в приложении Spring Boot, и мне нужно выполнить _ 1_ запрос к удаленному экземпляру ES с использованием Java API.
Я нашел способ выполнить эту задачу на этот вопрос, но в моем случае NPE пытается выполнить функцию .get()
.
В модуль для ES включены:
compile 'org.elasticsearch.module:reindex:2.4.1'
Вот фрагмент кода, который я использую для тестирования прямо сейчас:
UpdateByQueryRequestBuilder request = UpdateByQueryAction.INSTANCE.newRequestBuilder(clientWrapper.getClient()); // clientWrapper is a bean and gets injected
Script script = new Script(
"ctx._source.testName = \"TEST HAPPENED\"",
ScriptService.ScriptType.INLINE, null, null);
request.source().setTypes("type");
BulkIndexByScrollResponse r = request
.source(ES_INDEX_NAME)
.filter(QueryBuilders.termQuery("testId", "Sk9lzQHdJT0"))
.script(script)
.get(); // the exception gets raised here
Вот завернутый bean-компонент Client
:
@Bean
public ClientWrapper elasticsearchClient(Client client) {
return new ClientWrapper(
TransportClient.builder()
.addPlugin(ReindexPlugin.class) // here's the plugin that is supposed to work
.settings(client.settings())
.build());
}
Wrapper необходим для настройки через файлы конфигурации Spring Boot, так что это просто для удобства.
NullPointerException
вызывается вызовом execute(...)
метода TransportProxyClient
:
final TransportActionNodeProxy<Request, Response> proxy = proxies.get(action); // no proxy found here
...
proxy.execute(node, request, listener); // NPE here
Интересно, пропустил ли я какой-то шаг или, может быть, использование изменилось с момента упомянутого выше вопроса?