2015-10-30 9 views
6

私はES 2.0にアップグレードしようとしています。私はES 2.0を落としてWindowsマシンにインストールしました。私のpom.xmlでElasticsearch 2.0:Javaのクエリで削除する方法

、私は次のようしている:私のJavaコードで

<dependency> 
    <groupId>org.elasticsearch</groupId> 
    <artifactId>elasticsearch</artifactId> 
    <version>2.0.0-rc1</version> 
</dependency> 

<dependency> 
    <groupId>org.elasticsearch.plugin</groupId> 
    <artifactId>delete-by-query</artifactId> 
    <version>2.0.0-rc1</version> 
</dependency> 

、使用しているとき、私は次のようにクエリによって削除でしたES 1.7.3:

StringBuilder b = new StringBuilder(""); 
    b.append("{"); 
    b.append(" \"query\": {"); 
    b.append("  \"term\": {"); 
    b.append("   \"category\": " + category_value); 
    b.append("  }"); 
    b.append(" }"); 
    b.append("}"); 

    client = getClient(); 

    DeleteByQueryResponse response = client.prepareDeleteByQuery("myindex") 
       .setTypes("mydocytype") 
       .setSource(b.toString()) 
       .execute() 
       .actionGet(); 

私はこれを置き換えることを望んでいます:

DeleteByQueryResponse response = client.prepareDeleteByQuery("myindex") 
       .setTypes("mydocytype") 
       .setSource(b.toString()) 
       .execute() 
       .actionGet(); 

とES 2.0の方法です。グーグルではありますが、その例が見つかりませんでした。オンラインのAPIドキュメントは抽象的すぎるようです。どうしたらいいですか?

もう1つの質問:Elasticsearchサーバーにクエリ別削除プラグインをインストールする必要がありますか?

ポインタありがとうございます!

UPDATE

私はマックスの提案に続いて、ここで私が今持っているものです。

の設定は以下のように見えるよう、クライアントを作成するまず、:

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

セカンドを、クエリによる削除を行っている場所:

DeleteByQueryResponse rsp = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE) 
    .setIndices("myindex") 
    .setTypes("mydoctype") 
    .setSource(b.toString()) 
    .execute() 
    .actionGet(); 

私もインストールはESのルートディレクトリに以下を実行して、クエリプラグインによって削除:

bin\plugin install delete-by-query 

私はこのプラグインをインストールしない場合、私はエラーを取得します。

これらの手順をすべて実行した後、ES関連のパーツは正常に動作します。

答えて

10

は、私はあなたがこれを使用することができると信じて:

 DeleteByQueryResponse rsp = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE) 
      .setTypes("mydocytype") 
      .setSource(b.toString()) 
      .execute() 
      .actionGet(); 

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

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

リモートサーバーを持っている場合は、プラグインをインストールする必要があります。

+0

こんにちはマックス、私を助けてくれてありがとう! 「ローカルノードを使用する」とはどういう意味ですか?私はノートの上にすべてを持っています。 Java Webアプリケーションはポート8080で実行され、ESはポート9300で実行されます。手動で2つずつ起動する必要があります。別のもの:設定ステートメントに間違いがあります。私は自分のコードを更新し、常にNULLポインターエラーを持っています。 – curious1

+0

こんにちは、ローカルノードで、私は埋め込みESノード(https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/node-client.html)を使用することを意味しました。これを使うと、別のelasticsearchクライアントを起動する必要はありません。 あなたはトランスポータクライアント(https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html)を使ってelasticsearchノードに接続していると思います。 どこで正確にnullポインタが得られますか? – Max

+0

私はあなたがplugin.typesを入れなければならない組み込みノードを使用していない場合でも参照してください。私はこれについて私のコメントを編集しています。 – Max

12

は、ES 2.1.0(source)で廃止されました。したがって、承認されたソリューションはNullPointerExceptionになります。

溶液はaddPlugin方法を使用することである:まず

Client client = TransportClient.builder().settings(settings()) 
       .addPlugin(DeleteByQueryPlugin.class) 
       .build() 
       .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host",9300)); 
+0

あなたの情報をありがとう! – curious1

+0

クライアント側でも「プラグインを追加する」の目的は何ですか? –

2

: にelasticsearch-2.3.3 /プラグイン/削除・バイ・クエリ/削除・バイ・クエリ2.3.3.jarを追加パスを構築する。その後、

:以降における弾性5から

Client client = TransportClient.builder().settings(settings) 
       .addPlugin(DeleteByQueryPlugin.class) 
       .build() 
       .addTransportAddress(new InetSocketTransportAddress(
         InetAddress.getByName("192.168.0.224"), 9300)); 
4

...

final BulkIndexByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(super.transportClient) 
        .filter(
          QueryBuilders.boolQuery() 
            .must(QueryBuilders.termQuery("_type", "MY_TYPE")) // Trick to define and ensure the type. 
            .must(QueryBuilders.termQuery("...", "..."))) 
        .source("MY_INDEX") 
        .get(); 

    return response.getDeleted() > 0; 

Oficial documentation

+0

ダニ、情報ありがとう。アップグレードをお勧めします。乾杯。 – curious1

関連する問題