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