我有一个自动填充框来搜索模型。在搜索方法中,我有一个像
这样的条件MyModel.where("upper(translate(content,'ıişğüçö\302\240','IİŞĞÜÇÖ')) like '%#{q}%'")
如果查询str:“çağdaş”,查询将找到“Çağdaş”或“çaĞdaş”等。
但现在我想扩展这种搜索方法。我希望我的查询能够找到“Çagdaş”和“cagdas”以及ex。
有什么想法吗?
谢谢。
答案 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}%'")
现在它的工作方式就像它需要的那样。
请注意,这是非常具体的解决方案。
希望这有助于任何人。