我在查询中遇到复数问题。我需要的是 ruby 中的一种方法,或者是可以在我搜索时帮助我的 sql。例如:
当我搜索“数组”时 我希望它也返回“array”的结果。
谢谢
最佳答案
您要找的是word stemming .
你真的不能使用一堆正则表达式来提取像英语这样的语言,有太多的异常(exception)。你需要一个大词干词典。
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。
关于sql - 查询中的 Postgres/Rails 复数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12867373/