elasticsearchspring-data-elasticsearchelasticsearch-template

Spring Data Elasticsearch 2.1.16: how to get the sorting distance?


When you try to sort by distance in ES, the result usually contains the distance between matches and your search location:

  "hits": {
"total": 3,
"max_score": null,
"hits": [
  {
    "_index": "circle",
    "_type": "doc",
    "_id": "7",
    "_score": null,
    "_source": {
      "id": 7,
      "coordinates": {
        "lon": 112.548443,
        "lat": 37.780269
      }
    },
    "sort": [
      116.39283058047849
    ]
  },
  {
    "_index": "circle",
    "_type": "doc",
    "_id": "5",
    "_score": null,
    "_source": {
      "id": 5,
      "coordinates": {
        "lon": 112.55061,
        "lat": 37.779145
      }
    },
    "sort": [
      231.9203763747634
    ]
  }
]

} The sorting distance is contained in sort field. How do I get sorting distance in Spring Date Elasticsearch 2.1.16, with elasticsearchTemplate?

Here is my code for query: Page<CircleES> resultPage = elasticsearchTemplate.queryForPage(searchQuery, CircleES.class);


Solution

  • To get this information in version 2.1.16 you need to use the method

    queryForPage(SearchQuery query, Class<T> clazz, SearchResultMapper mapper)
    

    and provide a custom SearchResultMapper which parses the desired information from the returned data.

    Btw, 2.1.16 was released on October 15th, 2018 and is out of support.