Предположим, что у меня есть следующая модель, и я сделал ее доступной для поиска с помощью sunspot_rails
.
class Case < ActiveRecord::Base
searchable do
end
end
Стандарт schema.xml
Sunspot в Rails объявляет id
в качестве индексированного поля.Когда я использую веб-интерфейс для доступа к solr и тестовым запросам, запрос вроде:
http://localhost:8982/solr/select/?q=id%3A%22Case+15%22&version=2.2&start=0&rows=10&indent=on
, который ищет Cases
с id
, равным Case 15
, работает нормально и возвращает результаты.
Проблема в том, что когда я выполняю поиск с помощью Sunspot Rails в консоли rails:
s = Case.search do
keywords('id:"Case 15"')
end
Я получаю:
=> <Sunspot::Search:{:fl=>"* score", :rows=>10, :start=>0, :q="id:\"Case 15\"", :defType=>"dismax", :fq=>["type:Case"]}>
, которые показывают, что он правильно вставляет :q
правильное значение запроса, но число совпадений равно 0:
s.hits
возвращает
=> []
Если мы предположим, что keywords
не эквивалентно и выполняет поиск только в поле text
(полноетекстовый поиск), а не поле, определенное перед двоеточием :
, тогда я могу попробовать следующее:
s = Case.search do
with(:id, "Case 15")
end
, но это не удается с исключением Sunspot:
Sunspot::UnrecognizedFieldError: No field configured for Case with name 'id'
Какя могу искать, используя индексированное стандартное поле solr / sunspot id
моей модели?
И чтобы сделать вопрос более полезным, как я могу сделать заказ по идентификатору.Не работает следующее:
s = Case.search do
keywords("xxxx")
order_by :id, :desc
end
не работает.Sunspot::UnrecognizedFieldError: No field configured for Case with name 'id'