【发布时间】:2011-10-09 07:52:58
【问题描述】:
假设我有以下模型,并且我已使用 sunspot_rails 使其可搜索。
class Case < ActiveRecord::Base
searchable do
end
end
Rails 中 Sunspot 的标准 schema.xml 将 id 声明为索引字段。当我使用 Web 界面访问 solr 并测试查询时,查询如下:
http://localhost:8982/solr/select/?q=id%3A%22Case+15%22&version=2.2&start=0&rows=10&indent=on
在id 等于Case 15 的情况下搜索Cases 可以正常工作并返回结果。
问题是当我在 rails 控制台中使用 Sunspot 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::UnrecognizedFieldError: No field configured for Case with name 'id'
如何使用模型的索引标准 solr/sunspot id 字段进行搜索?
为了让问题更有用,我如何按 id 排序。以下方法不起作用:
s = Case.search do
keywords("xxxx")
order_by :id, :desc
end
不起作用。 Sunspot::UnrecognizedFieldError: No field configured for Case with name 'id'
【问题讨论】:
标签: sunspot sunspot-rails