Как убедиться, что 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