7

ES 2.0 にアップグレードしようとしています。ES 2.0 をダウンロードして、Windows マシンにインストールしました。

私のpom.xmlには、次のものがあります。

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

私の Java コードでは、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 ドキュメントは抽象的すぎるように思えます。どうすればいいですか?

別の質問: Elasticsearch サーバーに delete-by-query プラグインをインストールする必要がありますか?

ポインタをありがとう!

アップデート

私はマックスの提案に従いました。これが私が今持っているものです:

まず、クライアントを作成するときに、設定を次のようにします。

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

次に、delete-by-query を実行する場所で:

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

また、ES のルート ディレクトリで次のコマンドを実行して、delete by query プラグインをインストールしました。

bin\plugin install delete-by-query

このプラグインをインストールしないと、エラーが発生します。

これらのすべての手順の後、ES 関連のパーツは問題なく動作します。

4

4 に答える 4

11

これを使用できると思います:

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

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

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

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

于 2015-11-13T13:02:22.417 に答える
5

Elastic 5 以降では...

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;

公式文書

于 2017-01-07T22:17:09.480 に答える
2

まず、elasticsearch-2.3.3/plugins/delete-by-query/delete-by-query-2.3.3.jar をビルド パスに追加します。

それから:

Client client = TransportClient.builder().settings(settings)
                .addPlugin(DeleteByQueryPlugin.class)
                .build()
                .addTransportAddress(new InetSocketTransportAddress(
                        InetAddress.getByName("192.168.0.224"), 9300));
于 2016-07-26T10:23:37.170 に答える