Elasticsearch 2.0: Как удалить по запросу в Java

Я пытаюсь перейти на ES 2.0. Я downloaed ES 2.0 и установил его на моей машине Windows.

в моем пом.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 способом. Гуглил, но не смог найти для него пример. Документация online API кажется мне слишком абстрактной. Как мне это сделать? это?

другой вопрос: Должен ли я установить плагин delete-by-query на сервере Elasticsearch?

Спасибо за любой указатель!

обновление

Я за предложение Макса, и вот что у меня есть сейчас:

во-первых, при создании клиента, сделать настройки выглядят следующим образом:

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();

Я также установил delete by query plugin by запуск следующего в корневом каталоге ES:

binplugin install delete-by-query

Я получаю ошибки, если я не устанавливайте этот плагин.

после всех этих шагов, ES связанные части работают просто отлично.

4 ответов


Я верю, что вы можете использовать это:

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

вы должны добавить тип плагина в свои настройки:

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

Если у вас есть удаленный сервер, вы должны установить плагин.


plugin.types устарели в ES 2.1.0 (источник). Таким образом, принятое решение приведет к NullPointerException.

решение заключается в использовании addPlugin способ:

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

от эластичного 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;

документация Офичиал


во-первых: добавить Elasticsearch в-2.3.3/Плагины/удалить-по-запроса/удаление по запросу-2.3.3.jar для построения пути.

затем:

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