# How to write must and must not range query in Highlevel client

**URL:** <https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526>\
**Category:** Elasticsearch\
**Created:** [January 8, 2018, 12:58pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526 "2018-01-08T12:58:41Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![varun1992](https://avatars.discourse-cdn.com/v4/letter/v/3da27b/32.png) [@varun1992](https://discuss.elastic.co/u/varun1992)\
**Post date:** [January 8, 2018, 12:58pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/1 "2018-01-08T12:58:41Z")

</div>

Hi i write a aggregation query in new java api using HighLevelClient. I need help to add must and must not range query for filtering the data.

1. How can i add it ?
2. Is it possible to add json query with query builder ?

My code is as like below

```
    Map<String, String> aggVal = = new Map<String, String>();

    String index = aggVal.get("Index");
    String mainAggField = aggVal.get("Main_Aggregation_FieldName");
    String subAggField = aggVal.get("Sub_Aggregation_FieldName");
    String histFormat = aggVal.get("Histogram_Format");
    String histIntrvl = aggVal.get("Histogram_Interval");
    long minDocCount = Long.valueOf(aggVal.get("Min_Doc_Count"));

    DateHistogramInterval Intrval = new DateHistogramInterval(histIntrvl);

    SearchResponse response = client.search(new SearchRequest(index)
            .source(new SearchSourceBuilder()
                    .aggregation(
                            AggregationBuilders.dateHistogram("mainAgg")
                                    .field(mainAggField)
                                    .dateHistogramInterval(Intrval)
                                    .format(histFormat)
                                    .minDocCount(minDocCount)
                                    .subAggregation(
                                            AggregationBuilders.terms("subAgg").field(subAggField)
                                            .minDocCount(minDocCount) ))
                                   .size(0) ));
```

---

<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 8, 2018, 1:21pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/2 "2018-01-08T13:21:25Z")

</div>

You need to provide a query as explained in [https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html).

[https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.1.1/org/elasticsearch/index/query/QueryBuilders.html#boolQuery--](https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.1.1/org/elasticsearch/index/query/QueryBuilders.html#boolQuery--)

The boolQuery allows you to pass a must not query.

---

<div class="post-metadata">

**Author:** ![varun1992](https://avatars.discourse-cdn.com/v4/letter/v/3da27b/32.png) [@varun1992](https://discuss.elastic.co/u/varun1992)\
**Post date:** [January 9, 2018, 10:22am UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/3 "2018-01-09T10:22:10Z")

</div>

Is it like this ? or any other way ?

```
                BoolQueryBuilder bool = new BoolQueryBuilder().must(new RangeQueryBuilder("FieldName")
                            .format("")
                            .from("")
                            .to(""));

```

How can i pass json query DSL to query builder ? Is it possible ?  
That way i can easily change the bool query and dynamically filter the response

---

<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, 2018, 3:14pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/4 "2018-01-09T15:14:34Z")

</div>

Even easier:

```auto
QueryBuilders.boolQuery()
    .must(QueryBuilders.rangeQuery("FieldName").from(xxx).to(yyy));

```

But yes.

> How can i pass json query DSL to query builder ? Is it possible ?

May be this: [QueryBuilders (core 6.1.1 API)](https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.1.1/org/elasticsearch/index/query/QueryBuilders.html#wrapperQuery-java.lang.String-)

---

<div class="post-metadata">

**Author:** ![varun1992](https://avatars.discourse-cdn.com/v4/letter/v/3da27b/32.png) [@varun1992](https://discuss.elastic.co/u/varun1992)\
**Post date:** [January 11, 2018, 9:27am UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/5 "2018-01-11T09:27:24Z")

</div>

```
 SearchResponse response = client.search(new SearchRequest(index) 
            .source(

                    new SearchSourceBuilder()

                            .query( new WrapperQueryBuilder( " My json query "))

```

Throws error as follows

{"error":{"root\_cause":[{"type":"parse\_exception","reason":"Failed to derive xcontent"}],"type":"parse\_exception","reason":"Failed to derive xcontent"},"status":400}

How can i do it ?

---

<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 11, 2018, 6:06pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/6 "2018-01-11T18:06:24Z")

</div>

What do you put in `" My json query "`?

---

<div class="post-metadata">

**Author:** ![varun1992](https://avatars.discourse-cdn.com/v4/letter/v/3da27b/32.png) [@varun1992](https://discuss.elastic.co/u/varun1992)\
**Post date:** [January 12, 2018, 2:02pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/7 "2018-01-12T14:02:41Z")

</div>

i am thinking to use a must/must not query in place of "My json query"

but it will be changing. So need the query part in java api to be a json query.

```
"query": {"bool": { "must": 
[{"range" : {
        "@timestamp" : {
            "gte": "01-21-2017 08",
            "lte": "07-21-2018 05",
            "format": "MM-dd-yyyy hh"
        }} }]}}
```

---

<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 12, 2018, 2:39pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/8 "2018-01-12T14:39:14Z")

</div>

I "think" you need to pass something like:

```auto
{"bool": { "must": 
[{"range" : {
        "@timestamp" : {
            "gte": "01-21-2017 08",
            "lte": "07-21-2018 05",
            "format": "MM-dd-yyyy hh"
        }} }]}}

```

---

<div class="post-metadata">

**Author:** ![varun1992](https://avatars.discourse-cdn.com/v4/letter/v/3da27b/32.png) [@varun1992](https://discuss.elastic.co/u/varun1992)\
**Post date:** [January 13, 2018, 3:04pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/9 "2018-01-13T15:04:19Z")

</div>

That worked. Thanks

---

<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 10, 2018, 3:04pm UTC](https://discuss.elastic.co/t/how-to-write-must-and-must-not-range-query-in-highlevel-client/114526/10 "2018-02-10T15:04:27Z")

</div>

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