Sunspot полнотекстовый поиск с ИЛИ
У меня есть проект Rails с моделью User.
У него есть два поля: :name
, :surname
Также у меня есть поиск заката:
searchable do
text :name
text :surname
end
Когда я делаю такой поиск:User.solr_search { fulltext 'Name Surname' } .results
Как получить результаты всех результатов в таком порядке:
- где имя и фамилия
'Name Surname'
- где только фамилия
'Surname'
- где только имя
'Name'
Также я нашел, но я не понимаю, что мне нужно https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search
1 ответ
Решение
Вы можете использовать бустеры, чтобы результаты фамилий предшествовали результатам имен, а фамилии и именам результатов раньше фамилий.
searchable do
text :surname, boost: 2.0
text :name, boost: 1.0
end
Вы просите, чтобы любой термин был сопоставлен, а затем заказываете их по убыванию на счет. Результаты, соответствующие имени и фамилии, будут оцениваться выше, только фамилия будет ниже, а только имя - наименьшим.
@search=User.search
fulltext "#{name_variable} #{surname_variable}", :minimum_match => 1
order_by(:score, :desc)
end