# geoDistanceSort(String, GeoPoint\[\]) is ambiguous for the type SortBuilders

**URL:** <https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594>\
**Category:** Elasticsearch\
**Created:** [January 23, 2018, 5:31am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594 "2018-01-23T05:31:41Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 5:31am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/1 "2018-01-23T05:31:42Z")

</div>

In Elastic Search 6.1.0, facing this error,"The method geoDistanceSort(String, GeoPoint[]) is ambiguous for the type SortBuilders"

```
SortBuilders.geoDistanceSort("location")
                                    .point(latitude, longitude)
                                    .order(SortOrder.ASC)
                                    .unit(DistanceUnit.MILES)).setFrom(0)
                    .execute().actionGet();

```

In below code getting error to create GeoHashUtils class  
afb.add(QueryBuilders.geoHashCellQuery("location",  
GeoHashUtils.stringEncode(longitude, latitude), true).precision(  
Constants.NEARBY\_SCHOOL\_PRECISION));

This is the full code

```
@Override
    public List<GreatSchoolBaseInfo> getNearbySchoolInfoListByLatLng(
            double latitude, double longitude, int mile, int size, String schoolId) {
        List<GreatSchoolBaseInfo> nearbySchoolInfoList = new ArrayList<GreatSchoolBaseInfo>();

        //AndQueryBuilder afb = QueryBuilders.andQuery();
        QueryBuilder afb = null;

        if (StringUtils.isNotBlank(schoolId)) {
        	afb = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("_id", schoolId));
        	//afb.add(QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("_id", schoolId)));
        }
        afb.add(QueryBuilders.geoHashCellQuery("location",
                GeoHashUtils.stringEncode(longitude, latitude), true).precision(
                Constants.NEARBY_SCHOOL_PRECISION));
        
      /* QueryBuilders.geoBoundingBoxQuery("pin.location")                          
        .setCorners(longitude,latitude); */
        
       // QueryBuilders.geoBoundingBoxQuery("location");
        
          
        
        
        afb.add(QueryBuilders.geoDistanceQuery("location").lat(latitude).lon(longitude)
                .distance(mile, DistanceUnit.MILES).optimizeBbox("memory"));
       
        //FilteredQueryBuilder query = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), afb);
        QueryBuilder query = QueryBuilders.boolQuery().filter(afb);
         
        SearchResponse sr = null;
        try {

            sr = esClient
                    .prepareSearch()
                    .setIndices(this.esSchoolIndex)
                    .setQuery(query)
                    .setSize(size)
                    .addSort(
                            SortBuilders.geoDistanceSort("location")
                                    .point(latitude, longitude)
                                    .order(SortOrder.ASC)
                                    .unit(DistanceUnit.MILES)).setFrom(0)
                    .execute().actionGet();
            
            
        } catch (Exception e) {
            logger.error(e.toString(), e.fillInStackTrace());
            return nearbySchoolInfoList;
        }

        for (SearchHit e : sr.getHits()) {
            BigDecimal distance = new BigDecimal(0);
            if (e.getSortValues() != null && e.getSortValues().length > 0) {
                if (NumberUtils.isBigDecimal(e.getSortValues()[0].toString())) {
                    distance = new BigDecimal(e.getSortValues()[0].toString());
                }
            }

            Map<Class<?>, ObjectFactory> params = new HashMap<Class<?>, ObjectFactory>();
            params.put(Boolean.class, new ObjectFactory() {
                @Override
                public Object instantiate(ObjectBinder context, Object value,
                                          Type targetType, Class targetClass) {
                    return value != null ? new Boolean(value.toString())
                            : new Boolean(false);
                }
            });

            params.put(GeoPoint.class, new ObjectFactory() {
                @Override
                public Object instantiate(ObjectBinder context, Object value,
                                          Type targetType, Class targetClass) {
                    return new GeoPoint(((JsonNumber) ((Map) value).get("lat"))
                            .doubleValue(), ((JsonNumber) ((Map) value)
                            .get("lon")).doubleValue());
                }
            });

            GreatSchoolBaseInfo nearbySchool = JsonUtils.deserialize(
                    GreatSchoolBaseInfo.class, e.getSourceAsString(), params);

            nearbySchool.setDistance(distance);

            nearbySchoolInfoList.add(nearbySchool);
        }

        return nearbySchoolInfoList;
    }
```

---

<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 23, 2018, 7:48am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/2 "2018-01-23T07:48:25Z")

</div>

AFAIK `SortBuilders.geoDistanceSort("foo")` does not compile at all in 6.1.  
Not sure how you are getting that but may be you have 2 JARs in your classpath, one with 5.x the other with 6.1?

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 8:22am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/3 "2018-01-23T08:22:48Z")

</div>

Yes i have 2 jars in classpath , one with 5.5 and other with 6.10.

Please let me know is there any alternative for

`SortBuilders.geoDistanceSort("abc")`

and  
`GeoHashUtils.stringEncode("abc")`

---

<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 23, 2018, 8:53am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/4 "2018-01-23T08:53:31Z")

</div>

> Yes i have 2 jars in classpath , one with 5.5 and other with 6.10.

This is not going to work.

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 8:56am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/5 "2018-01-23T08:56:10Z")

</div>

I removed 5.5 then using 6.10, next how to proceed?

---

<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 23, 2018, 8:58am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/6 "2018-01-23T08:58:31Z")

</div>

Your favorite Java IDE will tell you what are the methods available... At least, mine does that.

Anyway, here we go:

[https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.1.2/org/elasticsearch/search/sort/SortBuilders.html#method.summary](https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.1.2/org/elasticsearch/search/sort/SortBuilders.html#method.summary)

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 12:00pm UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/7 "2018-01-23T12:00:26Z")

</div>

I tried to modify my code but i am not successfully, removed 5.5 jar and using 6.1.0 jar. please help me.

```
    if (StringUtils.isNotBlank(schoolId)) {
            	afb = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("_id", schoolId));
            	//afb.add(QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("_id", schoolId)));
            }
           /// actual code 
 afb.add(QueryBuilders.geoHashCellQuery("location",
                    GeoHashUtils.stringEncode(longitude, latitude), true).precision(
                    Constants.NEARBY_SCHOOL_PRECISION));*/
              //modified code, stuck up here
            afb = QueryBuilders.geoBoundingBoxQuery("location").setCorners(40.73, -74.1, 40.73, -74.1);
          
          //actual code afb.add(QueryBuilders.geoDistanceQuery("location").lat(latitude).lon(longitude)
                    .distance(mile, DistanceUnit.MILES).optimizeBbox("memory"));*/
            //modified code, stuck up here
            afb = QueryBuilders.geoBoundingBoxQuery("location").setCorners(40.73, -74.1, 40.73, -74.1);
```

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 1:05pm UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/9 "2018-01-23T13:05:11Z")

</div>

```
 afb.add(QueryBuilders.geoHashCellQuery("location",
                GeoHashUtils.stringEncode(longitude, latitude), true).precision(
                Constants.NEARBY_SCHOOL_PRECISION));
        
        afb.add(QueryBuilders.geoDistanceQuery("location")
                .lat(latitude).lon(longitude)
                .distance(mile, DistanceUnit.MILES).optimizeBbox("memory"));

```

Thanks for your quick responses.

The above 2 lines are the issue makers, so i followed this link,  
[https://www.elastic.co/guide/en/elasticsearch/reference/6.x/query-dsl-geohash-cell-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/6.x/query-dsl-geohash-cell-query.html)  
and  
[https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-geo-queries.html](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-geo-queries.html)

Please let me know what method to replace geoHashCellQuery() and geoDistanceQuery() is not accepting "The method lat(double) is undefined for the type GeoDistanceQueryBuilder"

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 1:13pm UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/10 "2018-01-23T13:13:24Z")

</div>

Able to resolve this

`afb = QueryBuilders.geoDistanceQuery("location").point(latitude, longitude).distance(mile, DistanceUnit.MILES);`

But don't know how to do this part on the above code

`.optimizeBbox("memory")`

---

<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 23, 2018, 1:31pm UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/11 "2018-01-23T13:31:15Z")

</div>

This option has been removed. See [https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-geo-distance-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-geo-distance-query.html) (it's marked as Deprecated in 2.2).

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 23, 2018, 4:43pm UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/12 "2018-01-23T16:43:09Z")

</div>

It looks like elasticsearch 5.6 documentation?

---

<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 23, 2018, 5:46pm UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/13 "2018-01-23T17:46:53Z")

</div>

Yes. And?

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 24, 2018, 3:43am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/14 "2018-01-24T03:43:44Z")

</div>

If that method is depreciated then why they are documenting it in 5.6 documentation?

Please help me in resolving this issue

```
afb.add(QueryBuilders.geoHashCellQuery("location",
                GeoHashUtils.stringEncode(longitude, latitude), true).precision(
                Constants.NEARBY_SCHOOL_PRECISION));
        
        afb.add(QueryBuilders.geoDistanceQuery("location")
                .lat(latitude).lon(longitude)
                .distance(mile, DistanceUnit.MILES).optimizeBbox("memory"));
```

---

<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 24, 2018, 6:28am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/15 "2018-01-24T06:28:07Z")

</div>

> [@javag](#):
>
> If that method is depreciated then why they are documenting it in 5.6 documentation?

Because it has not been removed in 5.6 but in 6.x.

Depreciation does not mean removal.

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 24, 2018, 8:39am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/16 "2018-01-24T08:39:18Z")

</div>

Ok Thanks for your reply.

> afb.add(QueryBuilders.geoHashCellQuery("location",  
> GeoHashUtils.stringEncode(longitude, latitude), true).precision(  
> Constants.NEARBY\_SCHOOL\_PRECISION));

above code modified like this

> afb = QueryBuilders.geoBoundingBoxQuery("location").setCorners(40.73, -74.1, 40.73, -74.1);

but unable to do this part, please suggest me.

> true).precision(  
> Constants.NEARBY\_SCHOOL\_PRECISION));

what is the replacement method for geoDistanceQuery()

```
afb.add(QueryBuilders.geoDistanceQuery("location")
                .lat(latitude).lon(longitude)
                .distance(mile, DistanceUnit.MILES).optimizeBbox("memory"));

```

---

<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 24, 2018, 8:58am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/17 "2018-01-24T08:58:01Z")

</div>

I guess something like:

```auto
afb.add(QueryBuilders.geoDistanceQuery("location")
                .point(latitude, longitude)
                .distance(mile, DistanceUnit.MILES));

```

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 24, 2018, 10:07am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/18 "2018-01-24T10:07:27Z")

</div>

this is working

```
afb = (QueryBuilders.geoDistanceQuery("location")
                        .point(latitude, longitude)
                        .distance(mile, DistanceUnit.MILES));

```

but have to apply  
`.optimizeBbox("memory")`

---

<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 24, 2018, 10:18am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/19 "2018-01-24T10:18:20Z")

</div>

Why? It does not exist.

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 24, 2018, 10:19am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/20 "2018-01-24T10:19:12Z")

</div>

```
QueryBuilder qb = geoDistanceQuery("pin.location")  
    .point(40, -70)                                 
    .distance(200, DistanceUnit.KILOMETERS)         
    .optimizeBbox("memory")                         
    .geoDistance(GeoDistance.ARC); 

```

[https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/java-geo-queries.html](https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/java-geo-queries.html)

---

<div class="post-metadata">

**Author:** ![javag](https://avatars.discourse-cdn.com/v4/letter/j/ecccb3/32.png) [@javag](https://discuss.elastic.co/u/javag)\
**Post date:** [January 24, 2018, 10:21am UTC](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594/21 "2018-01-24T10:21:08Z")

</div>

Do we need to use this url?

[https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-geo-queries.html#java-query-dsl-geo-bounding-box-query](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-geo-queries.html#java-query-dsl-geo-bounding-box-query)

[Next page](https://discuss.elastic.co/t/geodistancesort-string-geopoint-is-ambiguous-for-the-type-sortbuilders/116594.md?page=2)
