Clay Wardell
Clay Wardell

Reputation: 15632

ElasticSearch -- use distance from point to affect query relevance

Trying to use ElasticSearch to create a search that uses distance from a centerpoint to influence relevance.

I don't want to simply sort on distance from a point, which I know is possible, because I want relevance based on the searched query to also affect results.

I'd like to pass in a search string, say "coffee", and a lat/lon, say "38, -77", and get my results ordered by a combination of how related they are to "coffee" and how close they are to "38, -77".

Thanks!

Upvotes: 11

Views: 3579

Answers (2)

Jilles van Gurp
Jilles van Gurp

Reputation: 8324

The recently (0.90.4) added function_score query type adds support for ranking based on distance. This is an alternative to the custom score query type.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

An example lifted from there:

"query": {
  "function_score": {
    "functions": [
      { "gauss":  { "loc":   { "origin": "51,0", "scale": "5km" }}},
    ]
  }
}

This applies a decay function (there are several) to a field ("loc") that scores against the distance from an origin given a particular scale. This is exactly what you'd want for distance ranking since it gives you a lot of flexibility to how it should rank without writing custom scripts.

Upvotes: 11

imotov
imotov

Reputation: 30163

You can use distance function in the script of the Custom Score Query to modify _score based on the distance from a centerpoint.

Upvotes: 7

Related Questions