太阳黑子solr,order_by整数值完全破碎

时间:2014-08-02 07:38:55

标签: ruby-on-rails ruby solr sunspot-rails

我在使用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次重新索引 - 每次我尝试不同的版本

任何人都可以建议如何解决它或者至少可以尝试其他什么

提前致谢!

2 个答案:

答案 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

它会起作用