思考狮身人面像 - 使指数可排序不起作用

时间:2011-08-14 08:50:30

标签: ruby-on-rails thinking-sphinx

我已经设置了一些索引,一切似乎都运行良好,直到我想尝试将结果排序。我有几个模型,但我定义我的索引的是“医生”。我这样定义它们:

class SearchController < ApplicationController
  define_index do
    indexes :firstname,  :sortable => true
    indexes :lastname,   :sortable => true
    indexes :sex,        :sortable => true
    indexes practice(:name),    :as => :practice_name,    :sortable => true
    indexes practice(:address), :as => :practice_address, :sortable => true

    # Added after denormalization
    indexes county(:name),        :as => :county
    indexes municipality(:name),  :as => :municipality

    # Can only filter on integers, thus CRC32-ing
    has "CRC32(sex)", :as => :sex_filter, :type => :integer
  end
end

搜索似乎工作正常。当尝试对任何属性进行排序时,我会收到类似以下

的错误
  

index employee_core:未找到排序依据属性'firstname'

对于名字,姓氏和性别。我可以通过添加

来部分“解决”这个问题
  

有名字,姓氏,性别

define_index块,但我不知道如何对其他模型(练习)的引用做同样的事情,或者甚至可能。

任何人一开始都知道我可能做错了什么导致:sortable => true不起作用,或者我如何定义练习作为属性的引用?


我正在以一种上述方式失败的Thinking Sphinx调用的一个例子:

ThinkingSphinx.search "<some search string>", {:with=>{}, :order=>:firstname, :sort_mode=>:desc, :page=>1}

1 个答案:

答案 0 :(得分:3)

所以,这里的问题是Sphinx字段根本不可排序。思考Sphinx通过添加:sortable选项来解决这个问题 - 它添加了一个具有相同名称和_sort后缀的属性 - 所以,在此示例中为firstname_sort

当您在单个模型(Employee.search)上搜索时,Thinking Sphinx可以引用该模型并查看哪些字段是可排序的,并自动将firstname切换为firstname_sort。但是,您正在全球搜索,因此没有简单的TS参考。因此,解决方法是使用完整的属性名称:

ThinkingSphinx.search "foo", :order => :firstname_sort, :sort_mode => :desc

另外:如果您要搜索所有索引模型,请确保所有索引定义中都存在过滤器和排序中使用的属性。

添加:对关联字段进行排序也可以正常工作,给出相同的警告。