# Java API and range queries

**URL:** <https://discuss.elastic.co/t/java-api-and-range-queries/71859>\
**Category:** Elasticsearch\
**Created:** [January 17, 2017, 12:50pm UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859 "2017-01-17T12:50:33Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Stefano\_Violetta](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stefano_violetta/32/14646_2.png) [@Stefano\_Violetta](https://discuss.elastic.co/u/Stefano_Violetta)\
**Post date:** [January 17, 2017, 12:50pm UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/1 "2017-01-17T12:50:33Z")

</div>

Hello,  
I'd like to perform a range query containing:

```
 {
 	"range": {
 		"a": {
 			"lte": 1
 		},
 		"b": {
 			"gte": 1
 		},
 		"c": {
 			"gte": 1
 		},
 		"d": {
 			"lte": 2
 		}
 	}
 }

```

(a, b, c and d are sub-fields of a nested object) using the Java API version 2.2 (I cannot update them).  
The problem is that the Java API seems to allow only a single field inside the Range Query:

```
RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder("a");
rangeQueryBuilder.lte(1);

```

How could I do that?  
Thanks for your help.

---

<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 17, 2017, 3:51pm UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/2 "2017-01-17T15:51:00Z")

</div>

I don't think you can do that in REST either.

But wrap all your range queries inside a boolean query, add them as filters and you should be ok.

---

<div class="post-metadata">

**Author:** ![Stefano\_Violetta](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stefano_violetta/32/14646_2.png) [@Stefano\_Violetta](https://discuss.elastic.co/u/Stefano_Violetta)\
**Post date:** [January 17, 2017, 4:02pm UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/3 "2017-01-17T16:02:50Z")

</div>

I did it, in REST (via Sense); that's why I'm trying to do that in Java 🙂

---

<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 17, 2017, 7:26pm UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/4 "2017-01-17T19:26:35Z")

</div>

Hmmmm. This clearly not documented: [https://www.elastic.co/guide/en/elasticsearch/reference/5.1/query-dsl-range-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.1/query-dsl-range-query.html)

I think that in that case may be only one of the range query is applied, but unsure though.  
May be a full test would help to clarify that.

But whatever, I'd use a bool query here.

---

<div class="post-metadata">

**Author:** ![Stefano\_Violetta](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stefano_violetta/32/14646_2.png) [@Stefano\_Violetta](https://discuss.elastic.co/u/Stefano_Violetta)\
**Post date:** [January 19, 2017, 8:41am UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/5 "2017-01-19T08:41:25Z")

</div>

I did it using a nested object... (of course I put a mapping first)

```
{
  "query": {
    "bool": {
      "must": [       
        {
          "nested": {
            "path": "the_path", 
            "query": {
              "bool": {                  
                "must": [ 
                  {"range": {
                      "the_path.a": {"lte":2},
                      "the_path.b": {"gte":2},
                      "the_path.c":{"gte":18},
                      "the_path.d":{"lte":200}
                    }
                  }
                ]
              }
            }
          }
        }
      ]
}}}

```

I'll try to follow your advice, anyway, and reach the expected result in some other way.  
Thanks.

---

<div class="post-metadata">

**Author:** ![Stefano\_Violetta](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stefano_violetta/32/14646_2.png) [@Stefano\_Violetta](https://discuss.elastic.co/u/Stefano_Violetta)\
**Post date:** [January 19, 2017, 9:14am UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/6 "2017-01-19T09:14:00Z")

</div>

At the end, I was doing something wrong...

I changed my query to

```
        {
	"query": {
		"nested": {
			"path": "the_path",
			"query": {
				"bool": {
					"must": [{
						"range": {
							...
						}
					}, {
						"range": {
							...
						}
					}, {
						"range": {
							...
						}
					}, {
						"range": {
							...
						}
					}]
				}
			}
		}
	}
}

```

And it works!

---

<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 16, 2017, 9:14am UTC](https://discuss.elastic.co/t/java-api-and-range-queries/71859/7 "2017-02-16T09:14:22Z")

</div>

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