【问题标题】:cannot get order_by :score to work with Sunspot on Rails无法让 order_by :score 与 Sunspot on Rails 一起使用
【发布时间】:2012-11-29 22:43:16
【问题描述】:

我的模型中有以下内容:

searchable do
  boost { image? ? 2.0 : 1.0 }
end

我在我的控制器中执行以下操作:

@search = Profile.solr_search do
  with :is_private, false
  without(:id).equal_to(current_profile.id)
  order_by :score, :desc
  paginate page: (params[:page] || 1), per_page: 9
end

我在 Rails 控制台中尝试了Profile.solr_reindex,但结果的顺序没有改变。 order_by :random 有效,order_by :name 有效,但我无法按分数排序。这就像我的文档提升不起作用。我的目标是让所有设置了图像的个人资料首先出现。我目前得到的是第一个结果是一个带有图像的配置文件,然后是一堆无图像的配置文件,然后是另一个带有图像的配置文件。

编辑:认为我没有在模型中为image 定义字段可能很重要,所以我尝试将string :image 添加到Profile。没有运气。

【问题讨论】:

  • 为什么要明确地通过分数来提升?默认情况下。

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


【解决方案1】:

好的,开始按分数进行提升和排序。我将以下内容放在我的模型中的 searchable 块中:

boolean :has_image, using: :image?

然后在我的控制器中的 solr_search 块中进行以下操作:

order_by :has_image, :desc
order_by :random, :desc

现在我首先获取所有带有图片的配置文件,以某种随机顺序,然后是所有不带图片的配置文件,同样以随机顺序。

【讨论】:

    【解决方案2】:

    您也可以尝试根据您的标志来影响评分,如下所示:

    @search = Profile.solr_search do
      boost(10) { with(:has_image, true)}
      ...
    end
    

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多