Солнечное пятно: усиление элементов при совпадении поля с несколькими значениями

У меня есть объект Foo, у которого много объектов Bee. class Foo has_many :bees Я индексирую свой объект A с помощью Sunspot SOLR следующим образом.

searchable do
  text :title, boost: 5
  text :content, boost: 2
  integer :bee_ids, multiple: true
  ...
end

чтобы отслеживать идентификаторы Bee, связанные с моим объектом Foo.

Теперь у меня есть пользователь, который выполняет поиск объектов Foos. У пользователя тоже много пчел.

class User
    has_many :bees
    ...
end

Когда я ищу объекты Foos, я хотел бы повысить объекты, у которых есть пчелы, соответствующие пчелам пользователя.

Foo.search do
    fulltext query
    any_of do
       ...
       with(:bee_ids, @user.bees.pluck(:id))
    end
end

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


person coorasse    schedule 02.02.2014    source источник


Ответы (1)


Хорошо. Я нашел решение проблемы выше. Для этого вам нужно использовать параметр bq и усилить это условие.

я добавил

adjust_solr_params do |params|
  params[:bq] = " bee_ids_im:(#{@user.bees.pluck(:id).join(' OR ')})^20"
end

и я повышаю вышеперечисленное условие в 20 раз.

На самом деле это решение более общей проблемы усиления конкретных условий в запросе.

Sunspot поддерживает запросы на ускорение с помощью команды boost. Поэтому я изменил свой запрос на:

Foo.search do
  fulltext query do
    boost(20.0) do
      with(:bee_ids, @user.bees.pluck(:id))
    end
  end
  any_of do
    ...
    with(:bee_ids, @user.bees.pluck(:id))
  end
end

и я получил тот же результат.

Надеюсь, это может помочь кому-то другому.

person coorasse    schedule 02.02.2014
comment
Мне помогло, спасибо за ответ на ваш вопрос. - person Robin; 17.02.2021
comment
повышение во втором запросе работает только тогда, когда задан поисковый запрос, и полностью игнорируется в противном случае, верно? Это то, что он сделал, когда я тестировал его. - person Robin; 17.02.2021
comment
Кроме того, это только увеличивает документы, которые имеют какие-либо из этих интересов, по сравнению с другими, у которых их нет? Или документ, в котором есть 3 из 4 интересов, всегда появляется впереди документа, в котором есть 2? - person Robin; 17.02.2021