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,当然。您正在运行的返回错误的搜索查询是什么?帕特:很高兴看到开发人员参与进来。:-)我不太确定如何查看正在执行的实际查询。你能给我一个提示吗?啊,看到有一个简单的解释,我松了一口气。我稍后会尝试一下,如果可行的话,我会投票/接受答案。提前谢谢你,帕特!啊,看到有一个简单的解释,我松了一口气。我稍后会尝试一下,如果可行的话,我会投票/接受答案。提前谢谢你,帕特!