# Java API to use Filters

**URL:** <https://discuss.elastic.co/t/java-api-to-use-filters/7673>\
**Category:** Elasticsearch\
**Created:** [May 13, 2012, 1:06pm UTC](https://discuss.elastic.co/t/java-api-to-use-filters/7673 "2012-05-13T13:06:00Z")\
**Posts on this page:** 4\
**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, 1:06pm UTC](https://discuss.elastic.co/t/java-api-to-use-filters/7673/1 "2012-05-13T13:06:00Z")

</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":  
"AAMkADdmMDM4ZDZjLThkYjItNGZkYi05MDMyLWE3YzFkNWJkZWY1MABGAAAAAAAzlc4LRfuqSp  
TimVdZOAM5BwDVH  
+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": "t...@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.UpdateSettingsRequestBuilde  
r;  
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:** ![vinny](https://avatars.discourse-cdn.com/v4/letter/v/b9e5f3/32.png) [@vinny](https://discuss.elastic.co/u/vinny)\
**Post date:** [May 14, 2012, 4:04am UTC](https://discuss.elastic.co/t/java-api-to-use-filters/7673/2 "2012-05-14T04:04:31Z")

</div>

do a response.getHits() and check the size of the collection returned.

You should also try to build the query by hand with JSON and send it to  
your ES instance.

On Sunday, May 13, 2012 9:06:00 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":  
> "AAMkADdmMDM4ZDZjLThkYjItNGZkYi05MDMyLWE3YzFkNWJkZWY1MABGAAAAAAAzlc4LRfuqSp
> 
> TimVdZOAM5BwDVH  
> +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": "[t...@test.com](mailto:t...@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.UpdateSettingsRequestBuilde
> 
> r;  
> 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:** ![kimchy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kimchy/32/44952_2.png) [@kimchy](https://discuss.elastic.co/u/kimchy)\
**Post date:** [May 15, 2012, 8:29pm UTC](https://discuss.elastic.co/t/java-api-to-use-filters/7673/3 "2012-05-15T20:29:38Z")

</div>

When you use a term filter, make sure that the data for the indexed  
document did not end up being analyzed to a different terms. You can  
control that using mappings for example by setting the relevant field index  
to be not\_analyzed.

When having problems with something you can't find, start broadening the  
query / filters (for example, don't do the term filter) and see if you do  
manage to find data. Once you find the one that removes results that you  
expect, then its simpler to understand why it does not work.

On Sun, May 13, 2012 at 4:06 PM, ama sindhuc [amasindhu@gmail.com](mailto:amasindhu@gmail.com) 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":  
> "AAMkADdmMDM4ZDZjLThkYjItNGZkYi05MDMyLWE3YzFkNWJkZWY1MABGAAAAAAAzlc4LRfuqSp  
> TimVdZOAM5BwDVH  
> +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": "[t...@test.com](mailto:t...@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.UpdateSettingsRequestBuilde  
> r;  
> 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:** ![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, 3:28am UTC](https://discuss.elastic.co/t/java-api-to-use-filters/7673/4 "2017-07-06T03:28:44Z")

</div>


