Boosting on geo data


(Peter Schröder) #1

is it possible to provide some filter or query that allows me to boost on
geo-distance?

i.e. if there is a document with a location that is within 100km i want to
boost it to the top. if it isn't within the range, i don't want to boost it
at all.


(Igor Motov) #2

I think you achieve it by combining Custom Filters Score Query
(http://www.elasticsearch.org/guide/reference/query-dsl/custom-filters-score-query.html)
with Geo Distance Filter
(http://www.elasticsearch.org/guide/reference/query-dsl/geo-distance-filter.html)

On Monday, April 16, 2012 10:32:39 AM UTC-4, Peter Schröder wrote:

is it possible to provide some filter or query that allows me to boost on
geo-distance?

i.e. if there is a document with a location that is within 100km i want to
boost it to the top. if it isn't within the range, i don't want to boost it
at all.


(Peter Schröder) #3

yeah, had the same idea.

this kinda works:

{
"query": {
"custom_filters_score": {
"query": {
"match_all": {}
},
"filters": [
{
"filter": {
"geo_distance_range": {
"from": "0km",
"to": "100km",
"location": {
"lat": "47.16104233",
"lon": "8.42149815"
}
}
},
"boost": "3"
}
],
"score_mode": "first"
}
},
"filter": {
"term": {
"ck_names": "software"
}
}
}

but this gives me an error:

{
"query": {
"term": {
"ck_names": "software"
},
"custom_filters_score": {
"query": {
"match_all": {}
},
"filters": [
{
"filter": {
"geo_distance_range": {
"from": "0km",
"to": "100km",
"location": {
"lat": "47.16104233",
"lon": "8.42149815"
}
}
},
"boost": "3"
}
],
"score_mode": "first"
}
}
}

Caused by: org.elasticsearch.search.SearchParseException:
[development-companies-v3.8.1-218-gf575086-2012-04-02-112352][0]:
query[ConstantScore(NotDeleted(:))],from[-1],size[-1]: Parse Failure [No
parser for element [filters]]


(Igor Motov) #4

In the second case you cannot have two queries: "term" and
"custom_filter_score" queries on the same level. If you want the term query
to affect the score just replace match_all with term.

On Monday, April 16, 2012 12:12:46 PM UTC-4, Peter Schröder wrote:

yeah, had the same idea.

this kinda works:

{
"query": {
"custom_filters_score": {
"query": {
"match_all": {}
},
"filters": [
{
"filter": {
"geo_distance_range": {
"from": "0km",
"to": "100km",
"location": {
"lat": "47.16104233",
"lon": "8.42149815"
}
}
},
"boost": "3"
}
],
"score_mode": "first"
}
},
"filter": {
"term": {
"ck_names": "software"
}
}
}

but this gives me an error:

{
"query": {
"term": {
"ck_names": "software"
},
"custom_filters_score": {
"query": {
"match_all": {}
},
"filters": [
{
"filter": {
"geo_distance_range": {
"from": "0km",
"to": "100km",
"location": {
"lat": "47.16104233",
"lon": "8.42149815"
}
}
},
"boost": "3"
}
],
"score_mode": "first"
}
}
}

Caused by: org.elasticsearch.search.SearchParseException:
[development-companies-v3.8.1-218-gf575086-2012-04-02-112352][0]:
query[ConstantScore(NotDeleted(:))],from[-1],size[-1]: Parse Failure [No
parser for element [filters]]


(Peter Schröder) #5

d'oh!


(system) #6