通过混合大写和小写来思考狮身人面像

时间:2011-01-17 12:30:37

标签: ruby-on-rails sql-order-by sphinx thinking-sphinx

我有一个使用thinking_sphinx进行搜索的rails应用程序。我的问题是返回的结果首先是大写字母,小写字母是在底部。我想混合它们,以便“A”和“a”都出现在'B'之前。这是我正在使用的方法:

Company.search(query, :star => true, :page => params[:page], :per_page => 20, :order => :name, :sort_mode => :asc)

3 个答案:

答案 0 :(得分:3)

Maurício的回答几乎是在正确的轨道上 - 但那是为了改变Sphinx索引字段的文本。当你进行排序时,你是通过属性(不使用charset表转换)来做的。

您需要做的是将name out的排序属性与字段分开,并强制属性版本使用小写:

indexes :name
has "LOWER(companies.name)", :as => :name_sort

然后搜索成为:

Company.search query,
  :star      => true,
  :page      => params[:page],
  :per_page  => 20,
  :order     => :name_sort,
  :sort_mode => :asc

答案 1 :(得分:1)

您必须配置sphinx来转换输入,使大写字母变为小写字母。您可以使用"charset_table" config

执行此操作

这里有关于如何使用thinking_sphinx进行配置的complementary tutorial

答案 2 :(得分:0)

经过多个小时的研究,我得到了一个简单而优雅的解决方案,用于不区分大小写的搜索。只需按照以下方式定义索引即可。

indexes name, as: :name_sort, sortable: :insensitive