我在查询中遇到复数问题。我需要的是ruby中的一种方法,或者是在我搜索时可以帮助我的sql。例如:
当我搜索“数组”时,我希望它也返回“数组”的结果。
谢谢
我在查询中遇到复数问题。我需要的是ruby中的一种方法,或者是在我搜索时可以帮助我的sql。例如:
当我搜索“数组”时,我希望它也返回“数组”的结果。
谢谢
您正在寻找的是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)
尽管您会注意到词干词典并不完美;我希望搜索“goose”以匹配“geese”,但事实并非如此。您可能需要增强字典。PostgreSQL 的字典有时也可能对词干过于热情。
另一种方法是使用更大且更易于定制的工具,例如 Apache Solr。
您可以在使用 Postgres 全文搜索时修改字典,如此处和此处所述。
但是,由于 mu 太短,您可能最好使用更高级的工具。对于这种事情,我更喜欢Thinking Sphinx 。
Class.all(:conditions => ["attribute LIKE ?", "array%"])
应该这样做,我已经使用 Rails 2 有一段时间了,所以可能有更好的方法,但可以解决问题。