弃用SearchTye.SCAN
和新Reindex API我们希望将弹性搜索群集和客户端从2.1.1迁移到2.3.3。
我们使用java和适当的库来访问elasticsearch。要访问集群,我们使用TransportClient,对于嵌入式Unittests,我们使用NodeClient。
不幸的是,Reindex API作为插件提供,NodeClient似乎无法处理。
所以问题是如何将NodeClient与Reindex-Plugin一起使用?
我已经尝试公开受保护的NodeClient构造函数,将ReindexPlugin类作为参数传递但没有成功。
使用NodeClient启动嵌入式ElasticSearch并使用添加了ReindexPlugin的TransportClient也没有工作。我得到的只是一个例外:ActionNotFoundTransportException[No handler for action [indices:data/write/reindex]]
感兴趣的依赖:
启动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访问节点:
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);
触发重新索引的主要部分:
ReindexRequestBuilder builder = ReindexAction.INSTANCE.newRequestBuilder(getClient())
.source(indexFrom)
.destination(indexTo)
.refresh(true);
答案 0 :(得分:0)
通过结合上述两种方法,我能够解决这个问题。
因此,创建NodeClient涉及覆盖节点:
var button='<button class="close" type="button" title="Remove this page">×</button>';
var tabID = 1;
function resetTab(){
var tabs=$("#tab-list li:not(:first)");//get all tabs except first tab
var len=1;//we do not want to reset 1st tab
$(tabs).each(function(k,v){
len++;//increment it
$(this).find('a').html('Tab ' + len + button); //replace each tabs html with latest index and button html.
})
tabID--;//decrement tabs count
}
在启动NodeClient时使用它:
class ExposedNode extends Node {
public ExposedNode(Environment tmpEnv, Version version, Collection<Class<? extends Plugin>> classpathPlugins) {
super(tmpEnv, version, classpathPlugins);
}
}
之后,您可以使用添加ReindexPlugin的TransportClient,如问题中所述。
然而,这是一个肮脏的黑客,可能会在未来的版本中破解,并显示Elasticsearch支持插件开发的程度有多差。