gpt4 book ai didi

elasticsearch - 如何在嵌入式ES 2.3.3中使用DeleteByQuery插件

转载 作者:行者123 更新时间:2023-12-02 22:19:29 30 4
gpt4 key购买 nike

我已经以嵌入式方式运行了ES 2.3.3,但是由于所描述的异常,我无法调用DeleteByQuery操作。我将DeleteByQuery插件添加到我的类路径中,还为我未设置plugin.types设置,但仍然无法正常工作。

我的Maven依赖项:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>delete-by-query</artifactId>
<version>2.3.3</version>
</dependency>

我的ES设置:

Settings elasticsearchSettings = Settings.settingsBuilder()
.put("threadpool.index.queue_size", -1)
.put("path.home", options.getDirectory())
.put("plugin.types", DeleteByQueryPlugin.class.getName())
.build();

NodeBuilder builder = NodeBuilder.nodeBuilder();
node = builder.local(true).settings(elasticsearchSettings).node();

调用用于截断索引的操作。
DeleteByQueryRequestBuilder builder = new DeleteByQueryRequestBuilder(node.client(), DeleteByQueryAction.INSTANCE);
builder.setIndices(indexName).setQuery(QueryBuilders.matchAllQuery()).execute().addListener(new ActionListener<DeleteByQueryResponse>() {
public void onResponse(DeleteByQueryResponse response) {
if (log.isDebugEnabled()) {
log.debug("Deleted index {" + indexName + "}. Duration " + (System.currentTimeMillis() - start) + "[ms]");
}
sub.onCompleted();
};

@Override
public void onFailure(Throwable e) {
log.error("Deleting index {" + indexName + "} failed. Duration " + (System.currentTimeMillis() - start) + "[ms]", e);
sub.onError(e);
}
});

我看到的异常:
Caused by: java.lang.IllegalStateException: failed to find action [org.elasticsearch.action.deletebyquery.DeleteByQueryAction@7c1ed3a2] to execute
at org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java:56) ~[elasticsearch-2.3.3.jar:2.3.3]
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:359) ~[elasticsearch-2.3.3.jar:2.3.3]

最佳答案

我注意到“节点”构建器使用空插件列表调用了节点构造器。我扩展了Node类,以调用此( protected )构造函数。

public class ESNode extends Node {

protected ESNode(Settings settings, Collection<Class<? extends Plugin>> plugins) {
super(InternalSettingsPreparer.prepareEnvironment(settings, null), Version.CURRENT, plugins);
}
}

使用ESNode加载了所有需要的插件。
    Set<Class<? extends Plugin>> classpathPlugins = new HashSet<>();
classpathPlugins.add(DeleteByQueryPlugin.class);
node = new ESNode(settings, classpathPlugins).start();

这可能不是理想的,但到目前为止,它工作正常。

关于elasticsearch - 如何在嵌入式ES 2.3.3中使用DeleteByQuery插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38635752/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com