Как убедиться, что solr возвращает результаты, отсортированные по релевантности местоположения и релевантности ключевых слов

У меня есть модель, которая имеет местоположение и описание / название, эта информация индексируется в Solr. Однако при поиске данных я пытаюсь получить релевантность сначала по местоположению, а затем по ключевым словам, но я не могу этого достичь - если предоставляются как ключевые слова, так и местоположение, результаты сначала сортируются по ключевым словам.

searchable do
  location :coordinates do
    Sunspot::Util::Coordinates.new(self.location.latitude, self.location.longitude) if self.location
  end
  text :title
  text :description
  ...
end

Поиск определяется как таковой

  search.build do
    with(:coordinates).near(latitude, longitude, :precision=>radius)
    keywords "#{search_words}", :fields => [:title, :description], :minimum_match => 1
  end

Если это помогает, когда ключевые слова не предоставлены, результаты уже отсортированы по местоположению

1 ответ

Решение

Попробуйте увеличить расстояние до ключевых слов.

:score является внутренним полем, которое содержит оценку Solr dismax каждого результата поиска. Ваш заказ по умолчанию будет :score, :desc когда вы не указываете order_by,

Положить в order_by_geodist(:coordinates, latitude, longitude) вынуждает Solr игнорировать оценку dismax, поэтому вместо этого вы получаете порядок расстояний. Добавление order_by(:score, :desc) после этого будет приниматься во внимание оценка dismax, но только когда расстояния равны (или отсутствуют).

search.build do
  with(:coordinates).near(latitude, longitude, :precision=>radius)
  keywords "#{search_words}", :fields => [:title, :description], :minimum_match => 1
  order_by_geodist(:coordinates, latitude, longitude)
  order_by(:score, :desc)
end
Другие вопросы по тегам