是否有人能够从应用程序范围的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
有什么建议吗?
答案 0 :(得分:5)
在您的作者和资源搜索示例中,Thinking Sphinx有一个模型引用,因此可以查看该模型以查找其字段,并将sortable_name转换为sortable_name_sort(实际用于排序的属性)。
当您在多个模型中搜索时,Thinking Sphinx不会深入研究每个模型 - 因此您需要更加耐心地告诉它该做什么。请尝试以下方法:
ThinkingSphinx.search 'something', :order => :sortable_name_sort