Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 认为狮身人面像制作指数可排序是行不通的_Ruby On Rails_Thinking Sphinx - Fatal编程技术网

Ruby on rails 认为狮身人面像制作指数可排序是行不通的

Ruby on rails 认为狮身人面像制作指数可排序是行不通的,ruby-on-rails,thinking-sphinx,Ruby On Rails,Thinking Sphinx,我已经建立了一些索引,一切似乎都很顺利,直到我想尝试整理结果。我有几个模型,但我定义指数的模型是“医生”。我这样定义它们: class SearchController < ApplicationController define_index do indexes :firstname, :sortable => true indexes :lastname, :sortable => true indexes :sex, :so

我已经建立了一些索引,一切似乎都很顺利,直到我想尝试整理结果。我有几个模型,但我定义指数的模型是“医生”。我这样定义它们:

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

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

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

ThinkingSphinx.search "foo", :order => :firstname_sort, :sort_mode => :desc
另外:如果要搜索所有索引模型,请确保过滤器和排序中使用的属性存在于所有索引定义中


添加:根据相同的注意事项,从关联中排序到字段也可以。因此,这里的问题是Sphinx字段根本不可排序。Thinking Sphinx通过添加
:sortable
选项来解决这个问题,该选项添加了一个具有相同名称的属性加上一个_sort后缀,因此在本例中,
firstname_sort

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

ThinkingSphinx.search "foo", :order => :firstname_sort, :sort_mode => :desc
另外:如果要搜索所有索引模型,请确保过滤器和排序中使用的属性存在于所有索引定义中


考虑到相同的注意事项,将:sortable添加到关联中的字段也可以正常工作。

可以肯定的是,在添加
:sortable=>true
之后是否运行了
rake ts:rebuild
?是的,我第一次添加索引时添加了:sortable=>true,从那时起我已经运行了很多次rs:rebuild。我的意思是ts:rebuild,当然。您正在运行的返回错误的搜索查询是什么?帕特:很高兴看到开发人员参与进来。:-)我不太确定如何查看正在执行的实际查询。你能给我一个提示吗?可以肯定的是,你在添加
:sortable=>true之后是否运行了
rake ts:rebuild
?是的,我第一次添加索引时添加了:sortable=>true,从那以后我运行了很多次rs:rebuild。我的意思是ts:rebuild,当然。您正在运行的返回错误的搜索查询是什么?帕特:很高兴看到开发人员参与进来。:-)我不太确定如何查看正在执行的实际查询。你能给我一个提示吗?啊,看到有一个简单的解释,我松了一口气。我稍后会尝试一下,如果可行的话,我会投票/接受答案。提前谢谢你,帕特!啊,看到有一个简单的解释,我松了一口气。我稍后会尝试一下,如果可行的话,我会投票/接受答案。提前谢谢你,帕特!