问题描述
我正在使用ES-2.4.0作为我的应用程序,我有一个删除单个查询中的多个文档的用例。我试图使用 删除查询插件 ,但面临以下异常 导致:java.lang.IllegalStateException:找不到操作org.elasticsearch.action.deletebyquery.DeleteByQueryAction@7c1ed3a2]在org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java)上执行
:56)
在org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:359)
在org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:86)
在org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:56)
在org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder.execute(DeleteByQueryRequestBuilder.java:172)
以下是我的实现
if StringUtils.isEmpty(clusterNodes)){
//嵌入式模式
Settings.Builder setti ngs = Settings.settingsBuilder()。put(path.home,./);
if(embeddedTcpPort!= null){
settings.put(transport.tcp.port,embeddedTcpPort);
}
if(Boolean.valueOf(httpEnable)){
settings.put(http.enabled,true);
if(embeddedHttpPort!= null){
settings.put(http.port,embeddedHttpPort);
}
}
Node node = nodeBuilder()
.local(true)
.settings(settings.put(plugin.types,org.elasticsearch .plugin.deletebyquery.DeleteByQueryPlugin)。build())//添加删除插件
.node();
node.start();
this.client = node.client();
} else {
//集群模式
String [] clients = StringUtils.split(clusterNodes,,);
设置设置= Settings.settingsBuilder()。put(cluster.name,
clusterName).build();
TransportClient tClient = TransportClient.builder()。settings(settings).addPlugin(DeleteByQueryPlugin.class).build();
for(String val:clients){
String [] pair = val.split(:);
if(pair.length!= 2){
throw new IllegalArgumentException(
Messages.ES_CLIENT_NODE_ERROR);
} else {
try {
tClient.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(pair [0]),Integer.parseInt(pair [1])));
} catch(UnknownHostException ex){
throw new IllegalStateException(无法设置ElasticSearch连接,ex);
}
}
}
this.client = tClient;
}
我的maven依赖关系
<依赖性>
< groupId> org.elasticsearch< / groupId>
< artifactId> elasticsearch< / artifactId>
< version> 2.4.0< / version>
< / dependency>
<依赖关系>
< groupId> org.elasticsearch.plugin< / groupId>
< artifactId> delete-by-query< / artifactId>
< version> 2.4.0< / version>
< / dependency>
请在这里帮助我。我应该如何进行,我犯错误的地方?通过查询插件 删除 是否在ES2.4.0中可用?谢谢
您必须在您的设置中添加插件类型:
设置设置= Settings.settingsBuilder()
.put(plugin.types,DeleteByQueryPlugin.class.getName());
您是否安装了插件?
a href =https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html =nofollow noreferrer> https://www.elastic.co /guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html
I am using ES-2.4.0 for my application and I have a use case of deleting multiple documents in single query. I am trying to use delete by query plugin, but facing the following exception
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)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:359)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:86)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:56)
at org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder.execute(DeleteByQueryRequestBuilder.java:172)
Below is my implementation
if (StringUtils.isEmpty(clusterNodes)) {
// embedded mode
Settings.Builder settings = Settings.settingsBuilder().put("path.home", "./");
if(embeddedTcpPort!=null){
settings.put("transport.tcp.port", embeddedTcpPort);
}
if(Boolean.valueOf(httpEnable)){
settings.put("http.enabled", true);
if(embeddedHttpPort!=null){
settings.put("http.port", embeddedHttpPort);
}
}
Node node = nodeBuilder()
.local(true)
.settings(settings.put("plugin.types","org.elasticsearch.plugin.deletebyquery.DeleteByQueryPlugin").build()) //added delete plugin
.node();
node.start();
this.client = node.client();
} else {
// cluster mode
String[] clients = StringUtils.split(clusterNodes, ",");
Settings settings = Settings.settingsBuilder().put("cluster.name",
clusterName).build();
TransportClient tClient = TransportClient.builder().settings(settings).addPlugin(DeleteByQueryPlugin.class).build();
for (String val : clients) {
String[] pair = val.split(":");
if (pair.length != 2) {
throw new IllegalArgumentException(
Messages.ES_CLIENT_NODE_ERROR);
} else {
try {
tClient.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(pair[0]), Integer.parseInt(pair[1])));
} catch (UnknownHostException ex) {
throw new IllegalStateException("Could not set up ElasticSearch connection", ex);
}
}
}
this.client = tClient;
}
My maven dependency
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>delete-by-query</artifactId>
<version>2.4.0</version>
</dependency>
Please help me out here. How should I proceed and where I am making mistake? Is delete by query plugin is available in ES2.4.0? Thanks
You have to add plugin type to your settings:
Settings settings = Settings.settingsBuilder()
.put("plugin.types", DeleteByQueryPlugin.class.getName());
Did you install plugin?
https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html
这篇关于通过查询删除| elasticsearc 2.4.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!