# ES5.1 JavaAPI deletebyqueryRequestBuilder

**URL:** https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500
**Category:** Elasticsearch
**Created:** [January 4, 2017, 1:48am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500 "2017-01-04T01:48:45Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![AmazoneWebService](https://avatars.discourse-cdn.com/v4/letter/a/e19adc/32.png) [@AmazoneWebService](https://discuss.elastic.co/u/AmazoneWebService)
#### Post date: [January 4, 2017, 1:48am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/1 "2017-01-04T01:48:45Z")

</div>

Elasticsearch version: 5.1.1

OS version: centos 7

Description of the problem including expected versus actual behavior:  
ES 5.1 version does not support delete-by-query plugin.  
so i need to change the javaAPI code.

The following code is from the previous 2.3 version.

`new DeleteByQueryRequestBuilder(ElasticConnector.getInstance().getJavaClient(), DeleteByQueryAction.INSTANCE) .setIndices(GLOBAL_ID) .setTypes(MessageService.DEVICE) .setQuery(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("user_id", user_id)) .should(QueryBuilders.termQuery("device_id", device_id) .mustNot(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("user_id", user_id)) .must(QueryBuilders.termQuery("device_id", device_id)) )).execute().actionGet();t` indent

This code has a problem with "DeleteByQueryRequestBuilder cannot be resolved to a type"  
How do I change?

---

<div class="post-metadata">

### Author: ![nik9000](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nik9000/32/44947_2.png) [@nik9000](https://discuss.elastic.co/u/nik9000)
#### Post date: [January 4, 2017, 2:10am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/2 "2017-01-04T02:10:00Z")

</div>

In 5.1 delete by query was moved into the reindex module so it is shipped by default with Elasticsearch. You should be able to use it over the java API if you are using the PreBuiltTransportClient described [here](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html). This ought to work:

```auto
import org.elasticsearch.index.reindex.DeleteByQueryAction;
...

DeleteByQueryAction.newRequestBuilder(client)

```

---

<div class="post-metadata">

### Author: ![AmazoneWebService](https://avatars.discourse-cdn.com/v4/letter/a/e19adc/32.png) [@AmazoneWebService](https://discuss.elastic.co/u/AmazoneWebService)
#### Post date: [January 9, 2017, 6:54am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/3 "2017-01-09T06:54:20Z")

</div>

> DeleteByQueryResponse rsp =  
> new DeleteByQueryRequestBuilder(Client, DeleteByQueryAction.INSTANCE)  
> .setIndices("Indice")  
> .setTypes("Type")  
> .setQuery(QueryBuilders.termQuery("rowid", rowid))  
> .execute()  
> .actionGet();

I changed it to deleteByqueryAction.

> BulkIndexByScrollResponse = DeleteByQueryAction.INSTANCE.newRequestBuilder(Client)  
> .source("Indice")  
> .filter(QueryBuilders.termQuery("rowid", rowid))  
> .execute()  
> .actionGet();

.setIndices("Indice") is changed to .source("Indice"), and .setQuery() is changed to .filter()  
Is that right?  
And how do I change the .setType()?

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [January 9, 2017, 7:09am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/4 "2017-01-09T07:09:43Z")

</div>

You can add a filter on type field with [https://www.elastic.co/guide/en/elasticsearch/reference/5.1/query-dsl-type-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.1/query-dsl-type-query.html)

---

<div class="post-metadata">

### Author: ![AmazoneWebService](https://avatars.discourse-cdn.com/v4/letter/a/e19adc/32.png) [@AmazoneWebService](https://discuss.elastic.co/u/AmazoneWebService)
#### Post date: [January 9, 2017, 7:31am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/5 "2017-01-09T07:31:24Z")

</div>

thanks!

Is setType used only for search?  
Can not use delete?

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [January 9, 2017, 7:52am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/6 "2017-01-09T07:52:33Z")

</div>

You can use this type query within a bool query as a filter clause.  
Add your `QueryBuilders.termQuery("rowid", rowid)` also as another filter clause.

Then add this bool query to `.filter()`

I'm curious about what you are doing though. Are you removing only one single document with the delete by query API?

---

<div class="post-metadata">

### Author: ![AmazoneWebService](https://avatars.discourse-cdn.com/v4/letter/a/e19adc/32.png) [@AmazoneWebService](https://discuss.elastic.co/u/AmazoneWebService)
#### Post date: [January 9, 2017, 9:40am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/7 "2017-01-09T09:40:08Z")

</div>

Yes.

I want to delete documents that are executed by queryDSL  
under specific index, type, and routing conditions.

and i add type condition, as below.

> BulkIndexByScrollResponse = DeleteByQueryAction.INSTANCE.newRequestBuilder(Client)  
> .source("Indice")  
> .filter(QueryBuilders.termQuery("rowid", rowid))  
> **.filter(QueryBuilders.typeQuery("Type")**  
> .execute()  
> .actionGet();

.setRouting ("\_ id") is still not resolved ...

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [January 9, 2017, 7:25pm UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/8 "2017-01-09T19:25:01Z")

</div>

I meant using a bool query which has 2 filters.

Something like:

```
"bool" : {
  "filter": [
    { "term" : { "rowid" : "rowid" } },
    { "type" : { "value" : "Type" } }
  ]
}

```

Then add this boolQuery with `filter(boolQuery)` to your delete by query operation.

---

<div class="post-metadata">

### Author: ![AmazoneWebService](https://avatars.discourse-cdn.com/v4/letter/a/e19adc/32.png) [@AmazoneWebService](https://discuss.elastic.co/u/AmazoneWebService)
#### Post date: [January 10, 2017, 12:50am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/9 "2017-01-10T00:50:59Z")

</div>

Thank you very much for your interest.  
I did it the way you told me, but it does not work.  
There is no filter(boolQuery), and there are no type-related functions in the BoolQueryBuilder.

![](https://us1.discourse-cdn.com/elastic/original/2X/4/49072de42830bca882e93061922de88ef7a7f3a9.png)

![](https://us1.discourse-cdn.com/elastic/original/2X/7/7d8114ba5477508003e9c868c566f289fa6182bf.png)

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [January 10, 2017, 6:50am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/10 "2017-01-10T06:50:48Z")

</div>

QueryBuilders.boolQuery().filter(clause1).filter(clause2)

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [February 7, 2017, 6:50am UTC](https://discuss.elastic.co/t/es5-1-javaapi-deletebyqueryrequestbuilder/70500/11 "2017-02-07T06:50:51Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
