订购ThinkingSphinx.search结果

时间:2011-03-31 23:43:32

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

是否有人能够从应用程序范围的ThinkingSphinx查询中对搜索结果进行排序?

我有以下设置:

class Resource < ActiveRecord::Base

  # ... 

  define_index do
    indexes :title, :as => :sortable_name, :sortable => true
    indexes :tease
    indexes :description
    indexes authors(:name), :as => :author, :facet => true
  end

end

class Author < ActiveRecord::Base

  # ...

  define_index do
    indexes :name, :as => :sortable_name, :sortable => true
    indexes :title
    indexes :bio
  end

end

我希望能够搜索这些模型(以及其他2个模型),并按字母顺序对结果进行排序。我需要排序的字段可以有不同的名称,因此我使用以下命令对它们进行索引:as =&gt; :sortable_name(欢迎提供更好的建议)。

以下所有工作都像魅力一样:

Author.search 'something', :order => :sortable_name

Resource.search 'something', :order => :sortable_name

ThinkingSphinx.search 'something'

但是当我尝试

ThinkingSphinx.search 'something', :order => :sortable_name

我明白了:

ThinkingSphinx::SphinxError: index author_core,resource_core: sort-by attribute 'sortable_name' not found

使用以下命令将搜索显式限制为这些类:classes =&gt; [作者,资源]没有帮助。显然我不了解Sphinx在这里工作的方式......

我已经重建了我的索引并停止/启动了搜索过程,所有结果都相同。

Rails 3.0.5和ThinkingSphinx 2.0.2

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

在您的作者和资源搜索示例中,Thinking Sphinx有一个模型引用,因此可以查看该模型以查找其字段,并将sortable_name转换为sortable_name_sort(实际用于排序的属性)。

当您在多个模型中搜索时,Thinking Sphinx不会深入研究每个模型 - 因此您需要更加耐心地告诉它该做什么。请尝试以下方法:

ThinkingSphinx.search 'something', :order => :sortable_name_sort