2016-07-28 5 views
2

組み込みの方法でES 2.3.3を実行しましたが、説明されている例外のためにDeleteByQueryアクションを呼び出せません。私はクラスパスにDeleteByQueryプラグインを追加し、私のためのplugin.types設定も設定しましたが、まだ動作していません。埋め込みESでDeleteByQueryプラグインを使用する方法2.3.3

私の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 [[email protected]3a2] 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] 

答えて

3

私は、ノードビルダは、空のプラグインリストを持つノードのコンストラクタを呼び出すことに気づきました。この(保護された)コンストラクタを呼び出すためにNodeクラスを拡張しました。

public class ESNode extends Node { 

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

すべての必要なプラグインがロードされました。

Set<Class<? extends Plugin>> classpathPlugins = new HashSet<>(); 
    classpathPlugins.add(DeleteByQueryPlugin.class); 
    node = new ESNode(settings, classpathPlugins).start(); 

これは理想的ではないかもしれませんが、今のところうまく動作しています。

関連する問題