本文介绍了通过查询删除| elasticsearc 2.4.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-27 02:45