我在使用solr的太阳黑子宝石时遇到问题
我使用git的最新gem(2.1.1也尝试过2.1.0),我尝试过solr版本 - 3.2,3.5,4.2,4.9
问题是按整数值排序完全不起作用。
我的代码是:
@ads = Ad.solr_search do
paginate :page => params[:page], :per_page => 10000 #just for debug, not working with 25 as well
order_by :priority, :desc
end
在由以下代码初始化的模型太阳黑子中:
searchable do
text :search_name
text :search_description
integer :id
integer :state_id
integer :city_id
integer :district_id
boolean :moderated
integer :category_id
integer :priority
integer :price_index
latlon(:location) { Sunspot::Util::Coordinates.new(lat, lon) }
integer :ad_type_id
boolean :active
time :created_at
end
结果很糟糕 - http://i.imgur.com/Y7gazWw.png
我希望首先显示优先级最高的广告,但会在最后一个(!)页面上显示这些广告。
有趣的是 - 当我应用更多过滤器时 - 比如价格,city_id,state_id和其他东西 - 它要么开始正常工作,要么至少不是那么难以解决(就像上面显示的优先级记录一样)第一页,但仍有一些是洗牌)。但是,我应用更少排序的最少过滤器是毛刺,直至完全破坏。
我尝试过谷歌类似的问题,但没有发现任何东西,也尝试了所有可能影响问题的东西 - 不同的solr版本,不同的宝石版本,尝试改变代码一点点(但不多改变,重现问题3行代码就够了) - 没有改变行为。我已经完成了大约30次重新索引 - 每次我尝试不同的版本
任何人都可以建议如何解决它或者至少可以尝试其他什么
提前致谢!
答案 0 :(得分:2)
我有同样的问题。按整数类型排序无效。
所以我使用有点棘手的方式。这不是一个好的解决方案。但在修复错误之前它将是临时替代方案。
按时间排序类型运行良好。所以整数转换为时间。
我的代码是:
searchable do
...
integer :priority
time(:priority_to_time){DateTime.new(2014, 1, 1, 0, 0, 0) + self.priority}
end
在搜索代码中
Post.search do
...
order_by(:priority_to_time, :desc)
end
是的,这是非常奇怪的代码。但它确实有效。
如果有人有更多好主意,请为我们提供建议。
答案 1 :(得分:0)
默认情况下,Sunspot按“得分”排序结果,因此请添加额外的行:
order_by(:score, :desc)
order_by :priority, :desc
它会起作用