'c' - 'Ç' как регистрозависимый запрос в RoR - PullRequest
1 голос
/ 15 марта 2012

У меня есть окно автозаполнения для поиска модели.И в методе поиска у меня есть условие типа

MyModel.where("upper(translate(content,'ıişğüçö\302\240','IİŞĞÜÇÖ')) like '%#{q}%'")

Если запрос str: "çağdaş", запрос найдет "Çağdaş" или "çaĞdaş" и т. Д.

Но теперь я хочу расширитьэтот метод поиска.Я хочу, чтобы мой запрос нашел «Çagdaş» с «cagdas» и, например,

Есть идеи?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 15 марта 2012

Хм.Хотя я лично не очень доволен использованием специфичного для БД SQL, я бы посоветовал взглянуть на операции нечеткого совпадения в PostgresQL:

http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html

[править]: Здесь более общий подход, который требует или полагается на предварительный расчет алгоритма сопоставления (soundex - старый, но вы можете найти в Google много об этом)

0 голосов
/ 15 марта 2012

Я сделал это;

Сначала я преобразовал символы в строке запроса, которая не на английском языке.Например, ç => c, İ => I

, затем я переписываю строку условия как:

MyModel.where("translate(content,'ışğüçöİŞĞÜÇÖ','isgucoISGUCO') ilike '%#{q}%'")

Теперь она работает так, как нужно.

Обратите внимание, что она очень специфичнарешение.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 15 марта 2012

Это зависит от вашей базы данных ... В postgres вы можете использовать функцию ILIKE SQL

Какую СУБД и кодировку вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...