2017-03-12 12 views
0

私のアプリケーションでES-2.4.0を使用していますが、単一のクエリで複数の文書を削除するというユースケースがあります。私は、クエリプラグインによって削除を使用しようとしているが、以下クエリで削除| elasticsearc 2.4.0

Caused by: java.lang.IllegalStateException: failed to find action [email protected]3a2] 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) 

次の例外が直面していることは、私の実装です

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; 
    } 

私のMavenの依存

<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> 

私を助けてくださいていますこっちで。私はどのように進めて、私は間違っているのですか? クエリプラグインによって削除はES2.4.0で利用できますか?おかげ

答えて

0

あなたの設定にプラグインタイプを追加する必要があります。

Settings settings = Settings.settingsBuilder() 
         .put("plugin.types", DeleteByQueryPlugin.class.getName()); 

はあなたがプラグインをインストールしましたか?

https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html

+0

私はプラグインをインストールしていませんが、組み込みモードとクラスタモードの両方に追加しました。 – MrG

+0

私は自分のコードに追加しました(私のコードで見ることができます)。しかし、それをインストールしていない。私は私のコードでそれを追加していますが、私はそれをインストールする必要がありますか? – MrG

+0

クラスタ内の各ノードにプラグインをインストールする必要があります。 _プラグインはクラスタ内のすべてのノードにインストールする必要があり、インストール後に各ノードを再起動する必要があります._ https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query .html –

関連する問題