Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Sphinx_Thinking Sphinx - Fatal编程技术网

Ruby on rails 思考狮身人面像:索引组合列并使用较低的函数?

Ruby on rails 思考狮身人面像:索引组合列并使用较低的函数?,ruby-on-rails,sorting,sphinx,thinking-sphinx,Ruby On Rails,Sorting,Sphinx,Thinking Sphinx,我读过关于使用“LOWER”函数帮助对混合大小写列进行排序的文章。我想做一些类似的事情,但有一点更复杂的属性。首先,我有一个基本的多对多关系: class Project < ActiveRecord::Base has_many :project_people has_many :people, :through => :project_people end class ProjectPerson < ActiveRecord::Base belongs_to

我读过关于使用“LOWER”函数帮助对混合大小写列进行排序的文章。我想做一些类似的事情,但有一点更复杂的属性。首先,我有一个基本的多对多关系:

class Project < ActiveRecord::Base
  has_many :project_people
  has_many :people, :through => :project_people
end

class ProjectPerson < ActiveRecord::Base
  belongs_to :project
  belongs_to :person
end

class Person < ActiveRecord::Base
  has_many :project_people
  has_many :projects, :through => :project_people
end
这个索引很好,但是当人们的名字中使用大写和小写字母时,我发现了这个问题。我尝试用以下内容替换呼叫:

has ["LOWER(people.first_name)", "LOWER(people.middle_name)", "LOWER(people.last_name)"], :as => :person, :type => :string
但我在重建索引时不断出错:

ERROR: index 'project_core': sql_range_query: Unknown column 'people.first_name' in 'field list' (DSN=mysql://...).

如何实现“LOWER(…)”功能?或者,我真正的问题。如何对其编制索引,以便能够按person字段对项目进行排序,并使其不区分大小写?

在第一个示例中(正常列引用,而不是SQL代码段),尝试将
:sortable
设置为
:sinsensitive
而不是
true
谢谢,回答得很好。我想知道为什么我没有在文档中找到这个答案:(两个原因:文档不是完美的(但补丁当然是受欢迎的!),而且:这个功能目前还不在TS v3中(仅在v1/v2中)。我不太确定为什么它没有进行剪切(如果Sphinx使字符串属性本身正常化,可能不需要),但同样欢迎测试和/或补丁。
ERROR: index 'project_core': sql_range_query: Unknown column 'people.first_name' in 'field list' (DSN=mysql://...).