С отменой SearchTye.SCAN
и новым Reindex API мы хотим перенести наш кластер и клиенты elasticsearch с 2.1.1 до 2.3.3.Reindex elasticsearch 2.3.3 при использовании Java NodeClient
Мы используем java и соответствующие библиотеки для доступа к elasticsearch. Для доступа к кластеру мы используем TransportClient, для встроенных Unittests мы используем NodeClient.
К сожалению, Reindex API предоставлен в виде плагина, с которым NodeClient, похоже, не справляется.
Итак, вопрос в том, как использовать NodeClient с Reindex-Plugin?
Я уже пробовал разоблачить защищенный конструктор NodeClient, чтобы передать класс ReindexPlugin в качестве аргумента без успеха.
Использование NodeClient для запуска встроенного ElasticSearch и использования TransportClient с добавленным ReindexPlugin также не работало. Все я здесь есть исключение: ActionNotFoundTransportException[No handler for action [indices:data/write/reindex]]
Зависимости интереса:
- org.elasticsearch: elasticsearch: 2.3.3
- org.elasticsearch.module: переиндексации: 2.3.3
- орг .apache.lucene: Lucene-выражения: 5.5.1
- org.codehaus.groovy: заводной: 2.4.6
Запуск NodeClient:
Settings.Builder settings = Settings.settingsBuilder();
settings.put("path.data", "/some/path/data");
settings.put("path.home", "/some/path/home");
//settings.put("plugin.types", ReindexPlugin.class.getName()); > No effect
settings.put("http.port", 9299);
settings.put("transport.tcp.port", 9399);
node = NodeBuilder.nodeBuilder()
.clusterName("testcluster")
.settings(settings)
.local(true)
.node();
// also tested with local(false), then no transport port is available, resulting in NoNodeAvailableException
Использование TransportClient для доступа к Node:
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "testcluster")
.put("discovery.zen.ping.multicast.enabled", false)
.build();
InetSocketTransportAddress[] addresses = new InetSocketTransportAddress[]
{new InetSocketTransportAddress(new InetSocketAddress("localhost", 9399))};
client = TransportClient.builder()
.settings(settings)
.addPlugin(ReindexPlugin.class)
.build()
.addTransportAddresses(addresses);
Основная часть инициирующего REINDEX:
ReindexRequestBuilder builder = ReindexAction.INSTANCE.newRequestBuilder(getClient())
.source(indexFrom)
.destination(indexTo)
.refresh(true);