# FilterBuilders v0.9 to v6.0 valid code replace

**URL:** <https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554>\
**Category:** Elasticsearch\
**Created:** [December 20, 2017, 6:26am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554 "2017-12-20T06:26:04Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![satyarajp](https://avatars.discourse-cdn.com/v4/letter/s/90db22/32.png) [@satyarajp](https://discuss.elastic.co/u/satyarajp)\
**Post date:** [December 20, 2017, 6:26am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/1 "2017-12-20T06:26:04Z")

</div>

> [Java api for Filterbuilders in elasticsearch 2](https://discuss.elastic.co/t/java-api-for-filterbuilders-in-elasticsearch-2/34835)

Hi Team,

I'm going through the above link. Need some help with below code.

```
            BoolQueryBuilder query = QueryBuilders.boolQuery();
            BoolFilterBuilder filter = FilterBuilders.boolFilter().filterName("compositeFilter");
query.filter(QueryBuilders.termsQuery("SearchString", toLowerCase(filterList))).must();
    SearchRequestBuilder searchRequestBuilder = client
                    .prepareSearch(CONTENT_INDEX)
                    .setTypes(CONTENT_TYPE)
                    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        searchRequestBuilder.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), filter));
            searchRequestBuilder.setQuery(QueryBuilders.filteredQuery(query, filter));

```

Can the below code be most valid replacement....

```
    BoolQueryBuilder query = QueryBuilders.boolQuery();
    SearchRequestBuilder searchRequestBuilder = client
                    .prepareSearch(INDEX)
                    .setTypes(TYPE)
                    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
query.must(QueryBuilders.termsQuery("keyword", toLowerCase(filterList))).filter();
    searchRequestBuilder.setQuery(query.must(QueryBuilders.matchAllQuery()));
    searchRequestBuilder.setQuery(query.must());

```

The last line in replacement code doesn't compile. What should be good replacement there.

Thanks in advance....

---

<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:** [December 20, 2017, 7:39am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/2 "2017-12-20T07:39:34Z")

</div>

You need to remove:

```auto
    searchRequestBuilder.setQuery(query.must(QueryBuilders.matchAllQuery()));
    searchRequestBuilder.setQuery(query.must());

```

And I'd replace:

```auto
query.must(QueryBuilders.termsQuery("keyword", toLowerCase(filterList))).filter();

```

by

```auto
query.filter(QueryBuilders.termsQuery("keyword", toLowerCase(filterList)));

```

---

<div class="post-metadata">

**Author:** ![satyarajp](https://avatars.discourse-cdn.com/v4/letter/s/90db22/32.png) [@satyarajp](https://discuss.elastic.co/u/satyarajp)\
**Post date:** [December 20, 2017, 12:37pm UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/3 "2017-12-20T12:37:38Z")

</div>

Hi David,

seems like I missed the method call part. Here is actual code flow. That I understand is reason you considered can be done in one line. This infact is if..else condition and here is complete snippet.

```
BoolQueryBuilder query = QueryBuilders.boolQuery();
BoolFilterBuilder filter = FilterBuilders.boolFilter().filterName("compositeFilter");
addTermFilter(true, query, "cEnabled");
addFilter(typeFilters, query, "type");
if (filterCount == 0)
            searchRequestBuilder.setQuery(query);
        else if (filterCount > 0)
        	//searchRequestBuilder.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), filter)); v0.9
        	searchRequestBuilder.setQuery(query.filter(QueryBuilders.matchAllQuery()));//v6.0

private void addFilter(List<String> filterList, BoolQueryBuilder query, String field) {
    if (filterList != null && filterList.size() > 0) {
    	//query.filter(QueryBuilders.termsQuery("keyword", toLowerCase(filterList))).must();//v0.9
    	query.must(QueryBuilders.termsQuery("keyword", toLowerCase(filterList))).filter();//v6.0
        filterCount++;
    }
}  

private void addTermFilter(Object value, BoolQueryBuilder query, String field) {
    if (value != null) {
        //filterBuilder.must(FilterBuilders.termFilter(field, value)); //v0.9
        query.must(QueryBuilders.termQuery(field, value)).filter();//v6.0
        filterCount++;
    }
}
```

---

<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:** [December 20, 2017, 12:58pm UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/4 "2017-12-20T12:58:04Z")

</div>

Sorry but this is super weird to read.

Basically this is wrong:

```
query.must(QueryBuilders.termsQuery("keyword", toLowerCase(filterList))).filter();

```

And should be replaced by

```
query.filter(QueryBuilders.termsQuery("keyword", toLowerCase(filterList)));

```

This

```
query.must(QueryBuilders.termQuery(field, value)).filter();//v6.0

```

By

```
query.filter(QueryBuilders.termQuery(field, value));//v6.0

```

This

```
searchRequestBuilder.setQuery(query.filter(QueryBuilders.matchAllQuery()));

```

Has no sense and can be removed all together.

In short you can write something like

```
BoolQueryBuilder query = QueryBuilders.boolQuery();
query.filter(QueryBuilders.termsQuery("keyword", toLowerCase(typeFilters)));
query.filter(QueryBuilders.termQuery("cEnabled", true));

```

Something along those lines.

---

<div class="post-metadata">

**Author:** ![satyarajp](https://avatars.discourse-cdn.com/v4/letter/s/90db22/32.png) [@satyarajp](https://discuss.elastic.co/u/satyarajp)\
**Post date:** [December 22, 2017, 7:18am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/5 "2017-12-22T07:18:16Z")

</div>

Clear, One last doubt, if how does BoolQueryBuilder know it is filter or query.

---

<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:** [December 22, 2017, 10:21am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/6 "2017-12-22T10:21:37Z")

</div>

If you use filter or must not it's a filter.  
If you use must or should it's a query.

---

<div class="post-metadata">

**Author:** ![satyarajp](https://avatars.discourse-cdn.com/v4/letter/s/90db22/32.png) [@satyarajp](https://discuss.elastic.co/u/satyarajp)\
**Post date:** [December 22, 2017, 11:53am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/7 "2017-12-22T11:53:39Z")

</div>

Thank you sir.  
That post concludes my query.

---

<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:** [January 19, 2018, 11:53am UTC](https://discuss.elastic.co/t/filterbuilders-v0-9-to-v6-0-valid-code-replace/112554/8 "2018-01-19T11:53:48Z")

</div>

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