# And/Or Filter using Java API

**URL:** <https://discuss.elastic.co/t/and-or-filter-using-java-api/7672>\
**Category:** Elasticsearch\
**Created:** [May 13, 2012, 6:55am UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672 "2012-05-13T06:55:26Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ama\_sindhuc](https://avatars.discourse-cdn.com/v4/letter/a/c68b51/32.png) [@ama\_sindhuc](https://discuss.elastic.co/u/ama_sindhuc)\
**Post date:** [May 13, 2012, 6:55am UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672/1 "2012-05-13T06:55:26Z")

</div>

Hi

I have indexed the following document (as indicated below) in elastic  
search and attempting to apply a filter query using Java API (code  
below)

However I am not receiving any results .

Code is indicated below. Please assist to let me know if I am missing  
anything.

NOTE: StartTime and EndTime is mapped as DATE type

{  
"schedules":  
[  
{  
"Classification" : "schedule",

```
	  "type" : "outlookcalendar",

     "Id":

```

"AAMkADdmMDM4ZDZjLThkYjItNGZkYi05MDMyLWE3YzFkNWJkZWY1MABGAAAAAAAzlc4LRfuqSpTimVdZOAM5BwDVH  
+l4CJ/IRKcSEvbCqPNfAQtPns0bAADVH+l4CJ/IRKcSEvbCqPNfAQtPo/jDAAA=",

```
     "Subject":"Meet JK in Mountain View",

     "Location":"Red Rock Cafe",

     "StartTime": "Thu Jan 05 01:00:00 PST 2012",

     "EndTime": "Thu Jan 05 02:00:00 PST 2012",

     "Organizer": "test@test.com",

     "Body": "",

     "RequiredAttendees": "",

     "OptionalAttendees": "",
    }

```

}

The intended query is (classification = "schedule" AND type = "email)  
AND (range form Date(2012-5-01) to DATE(2012-7-01))

Code

package com.o1logic.services;

import  
org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder;  
import  
org.elasticsearch.action.admin.indices.settings.UpdateSettingsRequestBuilder;  
import  
org.elasticsearch.action.admin.indices.settings.UpdateSettingsResponse;  
import org.elasticsearch.action.search.SearchResponse;  
import org.elasticsearch.action.search.SearchType;  
import org.elasticsearch.client.Client;  
import org.elasticsearch.client.transport.TransportClient;  
import org.elasticsearch.common.joda.time.DateTime;  
import org.elasticsearch.common.joda.time.format.DateTimeFormat;  
import org.elasticsearch.common.joda.time.format.DateTimeFormatter;  
import org.elasticsearch.common.transport.InetSocketTransportAddress;  
import org.elasticsearch.common.unit.TimeValue;  
import org.elasticsearch.common.xcontent.XContentBuilder;  
import org.elasticsearch.common.xcontent.XContentFactory;  
import org.elasticsearch.index.query.\*;  
import org.elasticsearch.node.Node;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
import static  
org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;  
import static org.elasticsearch.index.query.FilterBuilders.andFilter;  
import static org.elasticsearch.index.query.FilterBuilders.orFilter;  
import static  
org.elasticsearch.index.query.FilterBuilders.rangeFilter;  
import static  
org.elasticsearch.index.query.QueryBuilders.filteredQuery;  
import static  
org.elasticsearch.index.query.QueryBuilders.matchAllQuery;

import static org.elasticsearch.node.NodeBuilder.nodeBuilder;

public class TestIndex  
{  
final static Logger logger =  
LoggerFactory.getLogger(TestIndex.class);  
public static void main(String[] args) {  
Node node = null;  
Client client = null;  
String elasticServer = "127.0.0.1";  
Integer elasticServerPort = 9300;

```
     logger.info("Initializing Search Server - Bootstrap");

    node = nodeBuilder().node();
    client = new TransportClient()
    .addTransportAddress(new

```

InetSocketTransportAddress(elasticServer, elasticServerPort));

```
    XContentBuilder indexSettings = null;

    FilterBuilder typeFilter = FilterBuilders.andFilter(

```

FilterBuilders.termsFilter("classification","schedule"),  
FilterBuilders.termsFilter("type",  
"outlookcalendar"))  
.filterName("classify");

```
    DateTimeFormatter dtf = DateTimeFormat.forPattern("YYYY-MM-

```

dd");  
DateTime dt1 = dtf.parseDateTime("2012-5-01");  
DateTime dt2 = dtf.parseDateTime("2012-7-01");

```
    AndFilterBuilder queryFilters = FilterBuilders.andFilter();
	queryFilters.add(FilterBuilders.termFilter("classification",

```

"scehdule"));  
queryFilters.add(FilterBuilders.termFilter("type",  
"excalendar"));

```
    RangeFilterBuilder rangeFilterBuilder =

```

FilterBuilders.rangeFilter("startTime");  
rangeFilterBuilder.from(dt1).to(dt2);

```
    FilterBuilder aggFilter =

```

FilterBuilders.andFilter(queryFilters,rangeFilterBuilder);

```
    QueryBuilder queryBuilder =

```

QueryBuilders.filteredQuery(QueryBuilders.queryString("coffee"),  
aggFilter);

```
    SearchResponse response = client.prepareSearch("mike")
                                               .setSearchType(SearchType.QUERY_AND_FETCH)
                                               .setQuery(queryBuilder)
                                               .setFilter(aggFilter)
                                               .setFrom(0).setSize(50).setExplain(true)
                                               .setScroll(new

```

TimeValue(600000))  
.setExplain(false)  
.execute()  
.actionGet();

```
    logger.info(response.toString());

}

```

}

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [May 14, 2012, 1:43pm UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672/2 "2012-05-14T13:43:17Z")

</div>

The field names in elasticsearch are case sensitive. You are using  
startTime in the query and StartTime in the document. Speaking of the  
document, make sure that StartTime is mapped correctly and uses appropriate date  
format[http://www.elasticsearch.org/guide/reference/mapping/date-format.html](http://www.elasticsearch.org/guide/reference/mapping/date-format.html)  
.

On Sunday, May 13, 2012 2:55:26 AM UTC-4, ama sindhuc wrote:

> Hi
> 
> I have indexed the following document (as indicated below) in elastic  
> search and attempting to apply a filter query using Java API (code  
> below)
> 
> However I am not receiving any results .
> 
> Code is indicated below. Please assist to let me know if I am missing  
> anything.
> 
> NOTE: StartTime and EndTime is mapped as DATE type
> 
> {  
> "schedules":  
> [  
> {  
> "Classification" : "schedule",
> 
> ```
> "type" : "outlookcalendar", 
> 
> "Id": 
> 
> ```
> 
> "AAMkADdmMDM4ZDZjLThkYjItNGZkYi05MDMyLWE3YzFkNWJkZWY1MABGAAAAAAAzlc4LRfuqSpTimVdZOAM5BwDVH
> 
> +l4CJ/IRKcSEvbCqPNfAQtPns0bAADVH+l4CJ/IRKcSEvbCqPNfAQtPo/jDAAA=",
> 
> ```
> "Subject":"Meet JK in Mountain View", 
> 
> "Location":"Red Rock Cafe", 
> 
> "StartTime": "Thu Jan 05 01:00:00 PST 2012", 
> 
> "EndTime": "Thu Jan 05 02:00:00 PST 2012", 
> 
> "Organizer": "test@test.com", 
> 
> "Body": "", 
> 
> "RequiredAttendees": "", 
> 
> "OptionalAttendees": "", 
> } 
> 
> ```
> 
> }
> 
> The intended query is (classification = "schedule" AND type = "email)  
> AND (range form Date(2012-5-01) to DATE(2012-7-01))
> 
> Code
> 
> package com.o1logic.services;
> 
> import  
> org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder;
> 
> import  
> org.elasticsearch.action.admin.indices.settings.UpdateSettingsRequestBuilder;
> 
> import  
> org.elasticsearch.action.admin.indices.settings.UpdateSettingsResponse;  
> import org.elasticsearch.action.search.SearchResponse;  
> import org.elasticsearch.action.search.SearchType;  
> import org.elasticsearch.client.Client;  
> import org.elasticsearch.client.transport.TransportClient;  
> import org.elasticsearch.common.joda.time.DateTime;  
> import org.elasticsearch.common.joda.time.format.DateTimeFormat;  
> import org.elasticsearch.common.joda.time.format.DateTimeFormatter;  
> import org.elasticsearch.common.transport.InetSocketTransportAddress;  
> import org.elasticsearch.common.unit.TimeValue;  
> import org.elasticsearch.common.xcontent.XContentBuilder;  
> import org.elasticsearch.common.xcontent.XContentFactory;  
> import org.elasticsearch.index.query.\*;  
> import org.elasticsearch.node.Node;  
> import org.slf4j.Logger;  
> import org.slf4j.LoggerFactory;  
> import static  
> org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;  
> import static org.elasticsearch.index.query.FilterBuilders.andFilter;  
> import static org.elasticsearch.index.query.FilterBuilders.orFilter;  
> import static  
> org.elasticsearch.index.query.FilterBuilders.rangeFilter;  
> import static  
> org.elasticsearch.index.query.QueryBuilders.filteredQuery;  
> import static  
> org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
> 
> import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
> 
> public class TestIndex  
> {  
> final static Logger logger =  
> LoggerFactory.getLogger(TestIndex.class);  
> public static void main(String args) {  
> Node node = null;  
> Client client = null;  
> String elasticServer = "127.0.0.1";  
> Integer elasticServerPort = 9300;
> 
> ```
> logger.info("Initializing Search Server - Bootstrap"); 
> 
> node = nodeBuilder().node(); 
> client = new TransportClient() 
> .addTransportAddress(new 
> 
> ```
> 
> InetSocketTransportAddress(elasticServer, elasticServerPort));
> 
> ```
> XContentBuilder indexSettings = null; 
> 
> FilterBuilder typeFilter = FilterBuilders.andFilter( 
> 
> ```
> 
> FilterBuilders.termsFilter("classification","schedule"),  
> FilterBuilders.termsFilter("type",  
> "outlookcalendar"))  
> .filterName("classify");
> 
> ```
> DateTimeFormatter dtf = DateTimeFormat.forPattern("YYYY-MM- 
> 
> ```
> 
> dd");  
> DateTime dt1 = dtf.parseDateTime("2012-5-01");  
> DateTime dt2 = dtf.parseDateTime("2012-7-01");
> 
> ```
> AndFilterBuilder queryFilters = FilterBuilders.andFilter(); 
> queryFilters.add(FilterBuilders.termFilter("classification", 
> 
> ```
> 
> "scehdule"));  
> queryFilters.add(FilterBuilders.termFilter("type",  
> "excalendar"));
> 
> ```
> RangeFilterBuilder rangeFilterBuilder = 
> 
> ```
> 
> FilterBuilders.rangeFilter("startTime");  
> rangeFilterBuilder.from(dt1).to(dt2);
> 
> ```
> FilterBuilder aggFilter = 
> 
> ```
> 
> FilterBuilders.andFilter(queryFilters,rangeFilterBuilder);
> 
> ```
> QueryBuilder queryBuilder = 
> 
> ```
> 
> QueryBuilders.filteredQuery(QueryBuilders.queryString("coffee"),  
> aggFilter);
> 
> ```
> SearchResponse response = client.prepareSearch("mike") 
> 
> ```
> 
> .setSearchType(SearchType.QUERY\_AND\_FETCH)  
> .setQuery(queryBuilder)  
> .setFilter(aggFilter)
> 
> .setFrom(0).setSize(50).setExplain(true)  
> .setScroll(new  
> TimeValue(600000))  
> .setExplain(false)  
> .execute()  
> .actionGet();
> 
> ```
> logger.info(response.toString()); 
> 
> } 
> 
> ```
> 
> }

---

<div class="post-metadata">

**Author:** ![mohammad](https://avatars.discourse-cdn.com/v4/letter/m/e274bd/32.png) [@mohammad](https://discuss.elastic.co/u/mohammad)\
**Post date:** [February 4, 2014, 9:32am UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672/3 "2014-02-04T09:32:57Z")

</div>

Hello everyone ,  
i am also trying to do something like this:  
my intended query is like this:  
select from range (dateA to dateB);

AndFilterBuilder myFilters = FilterBuilders.andFilter();  
myFilters.add(FilterBuilders.rangeFilter("dateFormatted").gte(dateDebut).lte(dateFin));

howeve this returns to nothing:  
the values dateDebut and dateFin are in the following format:  
yyyy/MM/dd

and the field _dateFormatted_ is in the following format:

--  
You received this message because you are subscribed to the Google Groups "elasticsearch" group.  
To unsubscribe from this group and stop receiving emails from it, send an email to [elasticsearch+unsubscribe@googlegroups.com](mailto:elasticsearch+unsubscribe@googlegroups.com).  
To view this discussion on the web visit [https://groups.google.com/d/msgid/elasticsearch/2b014627-03d6-4cb6-abd2-a2780aa15e0d%40googlegroups.com](https://groups.google.com/d/msgid/elasticsearch/2b014627-03d6-4cb6-abd2-a2780aa15e0d%40googlegroups.com).  
For more options, visit [https://groups.google.com/groups/opt\_out](https://groups.google.com/groups/opt_out).

---

<div class="post-metadata">

**Author:** ![zkidkid](https://avatars.discourse-cdn.com/v4/letter/z/fbc32d/32.png) [@zkidkid](https://discuss.elastic.co/u/zkidkid)\
**Post date:** [April 5, 2014, 8:43am UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672/4 "2014-04-05T08:43:25Z")

</div>

I suggest you convert your dateA to long & dateB to long & then using  
RangeFilter to do it.

On Tuesday, February 4, 2014 4:32:57 PM UTC+7, Mohammad Shafraz Subdurally  
wrote:

> Hello everyone ,  
> i am also trying to do something like this:  
> my intended query is like this:  
> select from range (dateA to dateB);
> 
> AndFilterBuilder myFilters = FilterBuilders.andFilter();  
> myFilters.add(FilterBuilders.rangeFilter("dateFormatted").gte(dateDebut).lte(dateFin));
> 
> howeve this returns to nothing:  
> the values dateDebut and dateFin are in the following format:  
> yyyy/MM/dd
> 
> and the field _dateFormatted_ is in the following format:

--  
You received this message because you are subscribed to the Google Groups "elasticsearch" group.  
To unsubscribe from this group and stop receiving emails from it, send an email to [elasticsearch+unsubscribe@googlegroups.com](mailto:elasticsearch+unsubscribe@googlegroups.com).  
To view this discussion on the web visit [https://groups.google.com/d/msgid/elasticsearch/471511cd-fda9-4d10-9358-30fcd4663a12%40googlegroups.com](https://groups.google.com/d/msgid/elasticsearch/471511cd-fda9-4d10-9358-30fcd4663a12%40googlegroups.com).  
For more options, visit [https://groups.google.com/d/optout](https://groups.google.com/d/optout).

---

<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:** [April 5, 2014, 8:52am UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672/5 "2014-04-05T08:52:06Z")

</div>

It depends on your mapping I guess.

What does it look like?

--  
David 😉  
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs

Le 5 avr. 2014 à 10:43, kidkid [zkidkid@gmail.com](mailto:zkidkid@gmail.com) a écrit :

I suggest you convert your dateA to long & dateB to long & then using RangeFilter to do it.

> On Tuesday, February 4, 2014 4:32:57 PM UTC+7, Mohammad Shafraz Subdurally wrote:
> 
> Hello everyone ,  
> i am also trying to do something like this:  
> my intended query is like this:  
> select from range (dateA to dateB);
> 
> AndFilterBuilder myFilters = FilterBuilders.andFilter();  
> myFilters.add(FilterBuilders.rangeFilter("dateFormatted").gte(dateDebut).lte(dateFin));
> 
> howeve this returns to nothing:  
> the values dateDebut and dateFin are in the following format:  
> yyyy/MM/dd
> 
> and the field dateFormatted is in the following format:

--  
You received this message because you are subscribed to the Google Groups "elasticsearch" group.  
To unsubscribe from this group and stop receiving emails from it, send an email to [elasticsearch+unsubscribe@googlegroups.com](mailto:elasticsearch+unsubscribe@googlegroups.com).  
To view this discussion on the web visit [https://groups.google.com/d/msgid/elasticsearch/471511cd-fda9-4d10-9358-30fcd4663a12%40googlegroups.com](https://groups.google.com/d/msgid/elasticsearch/471511cd-fda9-4d10-9358-30fcd4663a12%40googlegroups.com).  
For more options, visit [https://groups.google.com/d/optout](https://groups.google.com/d/optout).

--  
You received this message because you are subscribed to the Google Groups "elasticsearch" group.  
To unsubscribe from this group and stop receiving emails from it, send an email to [elasticsearch+unsubscribe@googlegroups.com](mailto:elasticsearch+unsubscribe@googlegroups.com).  
To view this discussion on the web visit [https://groups.google.com/d/msgid/elasticsearch/67D9B39D-4760-430F-BB75-D71F2A8CF225%40pilato.fr](https://groups.google.com/d/msgid/elasticsearch/67D9B39D-4760-430F-BB75-D71F2A8CF225%40pilato.fr).  
For more options, visit [https://groups.google.com/d/optout](https://groups.google.com/d/optout).

---

<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:** [July 6, 2017, 1:38am UTC](https://discuss.elastic.co/t/and-or-filter-using-java-api/7672/6 "2017-07-06T01:38:00Z")

</div>


