'c' - 'Ç'就像RoR中的大小写不敏感查询一样

时间:2012-03-15 12:41:49

标签: ruby-on-rails ruby activerecord

我有一个自动填充框来搜索模型。在搜索方法中,我有一个像

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

如果查询str:“çağdaş”,查询将找到“Çağdaş”或“çaĞdaş”等。

但现在我想扩展这种搜索方法。我希望我的查询能够找到“Çagdaş”和“cagdas”以及ex。

有什么想法吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

这取决于你的数据库...... 在postgres中,您可以使用ILIKE SQL函数

您使用的是哪个DBMS和字符集?

答案 1 :(得分:0)

嗯。虽然我个人对使用特定于数据库的SQL并不满意,但我建议你看一下PostgresQL中的模糊匹配操作:

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

[编辑]:Here是一种更通用的方法,需要或依赖于匹配算法的预先计算(soundex是一个旧的,但你可能会在谷歌找到很多这方面)

答案 2 :(得分:0)

我这样做了;

首先我在查询字符串中转换了非英文字符。与ç => c, İ => I

一样

然后我重写我的条件字符串,如;

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

现在它的工作方式就像它需要的那样。

请注意,这是非常具体的解决方案。

希望这有助于任何人。