我在查询中遇到复数问题。我需要的是ruby中的方法,或者是我搜索时可以帮助我的sql。例如:
当我搜索“数组”时 我希望它也返回“数组”的结果。
由于
答案 0 :(得分:3)
您要找的是word stemming。
你不能真正使用一堆正则表达式来阻止像英语这样的语言,但是有太多例外。你需要一本很棒的词典。
PostgreSQL的全文搜索提供了这样的字典,我强烈建议您使用全文搜索来完成这项工作:
regress=# WITH vals(a,b) AS (VALUES ('goose','geese'), ('query','queries'), ('arrays','array'))
SELECT to_tsquery(a), to_tsvector(b), to_tsquery(a) @@ to_tsvector(b) FROM vals;
to_tsquery | to_tsvector | ?column?
------------+-------------+----------
'goos' | 'gees':1 | f
'queri' | 'queri':1 | t
'array' | 'array':1 | t
(3 rows)
虽然你会注意到词干词典并不完美;我期待搜索“鹅”以匹配“鹅”,但事实并非如此。您可能需要增强字典。 PostgreSQL的字典也可以是a bit over-enthusiastic about stemming at times。
另一种方法是使用更大,更容易定制的工具,如Apache Solr。
答案 1 :(得分:1)
使用Postgres全文搜索时,您可以修改字典here和here。
但是,由于提到mu太短,你可能更适合使用更高级的工具。对于这种事情,我更喜欢Thinking Sphinx。
答案 2 :(得分:0)
Class.all(:conditions => ["attribute LIKE ?", "array%"])
应该这样做,我已经使用Rails 2了一段时间,所以有一个更好的方法但是会做到这一点。