NPE при выполнении обновления по запросу в Elasticsearch с использованием Java

Я использую 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

Интересно, пропустил ли я какой-то шаг или, может быть, использование изменилось с момента упомянутого выше вопроса?


person dazewell    schedule 03.11.2016    source источник


Ответы (1)


вам не хватает конфигурации для информации о транспорте. Это должно быть TransportClient.builder().addPlugin(ReindexPlugin.class) .build().addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("127.0.0.1"), 9300));

person lehanh    schedule 17.03.2017
comment
Какую версию elasticsearch и reindex вы используете, пожалуйста? Я получаю сообщение об ошибке TransportClient.builder() не может быть устранено. - person Adam Libuša; 13.07.2017
comment
Я использую ES 2.xx - person lehanh; 13.07.2017
comment
Хорошо спасибо. Просто подсказка для тех, кто будет использовать версию 5.5.0 или аналогичную: плагин должен быть добавлен в качестве второго параметра в конструкторе PreBuiltTransportClient. - person Adam Libuša; 13.07.2017