太阳黑子Rails按型号ID订购搜索结果?

时间:2011-07-20 11:38:00

标签: sunspot sunspot-rails

假设我有以下模型,并且我可以使用sunspot_rails进行搜索。

class Case < ActiveRecord::Base
  searchable do
  end
end

Rails中Sunspot的标准schema.xmlid声明为索引字段。当我使用Web界面访问solr并测试查询时,查询如下:

http://localhost:8982/solr/select/?q=id%3A%22Case+15%22&version=2.2&start=0&rows=10&indent=on

搜索Casesid等于Case 15的工作正常并返回结果。

问题是当我在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'

1 个答案:

答案 0 :(得分:4)

您正在谈论的ID是太阳黑子内部字段,不应直接使用。

为什么不添加自己的id字段(更改变量名称,以避免名称冲突):

class Case < ActiveRecord::Base
  searchable do
    integer :model_id {|content| content.id }
  end
end

然后

s = Case.search do
  keywords("xxxx")
  order_by :model_id, :desc
end

其他(杂乱)选项是直接破解solr params

s = Case.search do
  keywords("xxxx")
  adjust_solr_params(:sort, 'id desc')
end