ElasticSearch - использовать расстояние от точки, чтобы повлиять на релевантность запроса

Попытка использовать ElasticSearch для создания поиска, который использует расстояние от центра, чтобы влиять на релевантность.

Я не хочу просто сортировать на расстоянии от точки, которая, как я знаю, возможна, потому что я хочу, чтобы релевантность на основе поискового запроса также влияла на результаты.

Я хотел бы перейти в строку поиска, сказать "кофе" и "лат/лон", скажем "38, -77", и получить мои результаты, заказанные комбинацией того, как они связаны с "кофе", и насколько они близки к "38, -77".

Спасибо!

Ответ 2

Недавно (0.90.4) добавленный тип запроса функции_score добавляет поддержку ранжирования на основе расстояния. Это альтернатива типу пользовательских запросов.

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

Пример, поднятый оттуда:

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

Это применит функцию распада (ее несколько) к полю ( "loc" ), которое оценивается относительно расстояния от источника, заданного определенным масштабом. Это именно то, что вы хотите для ранжирования, поскольку оно дает вам большую гибкость в отношении того, как он должен оцениваться без написания специальных сценариев.