мышление сфинкса упорядочение путем смешивания прописных и строчных букв - PullRequest
1 голос
/ 17 января 2011

У меня есть приложение rails, которое используетinking_sphinx для поиска.Моя проблема в том, что возвращаемый результат сортируется по заглавным буквам в начале и в нижнем регистре после него в нижней части.Я хотел бы смешать их так, чтобы и «A», и «a» предшествовали «B».Это метод, который я использую:

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

Ответы [ 3 ]

3 голосов
/ 18 января 2011

Ответ Маурисио почти на правильном пути - но это для преобразования текста, который Сфинкс индексирует для полей.Когда вы сортируете, вы делаете это по атрибутам (которые не используют преобразования таблицы кодировок).

Что вам нужно сделать, это отделить атрибут сортировки имени от поля,и заставить версию атрибута использовать строчные буквы:

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 голос
/ 17 января 2011

Вам необходимо настроить sphinx для преобразования ввода, чтобы заглавные буквы стали строчными.Вы можете сделать это с помощью конфигурации "charset_table" .

. А вот дополнительный учебник о том, как настроить его при помощи мышления_сфинкса.

0 голосов
/ 04 августа 2016

После долгих исследований я получил простое и элегантное решение для поиска без учета регистра.Просто определите ваш индекс следующим образом.

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