【问题标题】:Thinking Sphinx group options思考狮身人面像组选项
【发布时间】:2011-01-23 17:36:15
【问题描述】:

好的,所以我有 4 个模型,我在这样的一次搜索中搜索它们

#category model
define_index do
  indexes :name, :description, :tag
  indexes sub_categories.name, :as => :subcategory_name
end

#pattern model
define_index do
  indexes :name, :tag_name, :reference
  indexes colorways.filename, :as => :color_name
end

等等....我还有一个搜索控制器,通过这个命令调用它们

@results = ThinkingSphinx.search params[:search], :page => params[:page], :per_page => 25

我需要根据模型对结果进行分组,例如,我首先希望所有图形结果,然后是类别,然后是子类别,所以在我看来,我可以将所有图形和类别放在一起...... .关于按对象对它们进行分组或排序的最佳方式的任何想法...

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 group-by thinking-sphinx


    【解决方案1】:

    有两种方法...首先,Thinking Sphinx 将类名的 CRC 版本存储为属性,因此您可以要求 Sphinx 进行排序:

    ThinkingSphinx.search params[:search],
      :page     => params[:page],
      :per_page => 25,
      :order    => 'class_crc ASC, @relevance DESC'
    

    但是,这并不强制执行特定顺序(您提到您首先需要图形结果)-因此您可能需要考虑一种不同的方法-为每个索引定义添加手动属性,并使用整数确定顺序:

    has '1', :as => :model_order, :type => :integer
    

    根据您希望在搜索结果中的位置,将每个索引定义的 1 更改为 2、3 等。然后搜索看起来像这样:

    ThinkingSphinx.search params[:search],
      :page     => params[:page],
      :per_page => 25,
      :order    => 'model_order ASC, @relevance DESC'
    

    希望这两个选项之一适合您的追求。

    【讨论】:

    • 嘿 pat 确实有 '1', :as => :model_order, :type => :integer go in each model and the 1 will be in the graphics model
    【解决方案2】:

    一种快速而肮脏的方法是使用group_by 和模型类名:

    @results.group_by(&:class)

    但它可能不适用于大型结果集。为此,您可以考虑将模型名称作为列添加到每个表中,并使用 ThinkingSphinx 进行分组,如 in the docs 所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2017-06-03
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多