4

我在查询中遇到复数问题。我需要的是ruby中的一种方法,或者是在我搜索时可以帮助我的sql。例如:

当我搜索“数组”时,我希望它也返回“数组”的结果。

谢谢

4

3 回答 3

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)

尽管您会注意到词干词典并不完美;我希望搜索“goose”以匹配“geese”,但事实并非如此。您可能需要增强字典。PostgreSQL 的字典有时也可能对词干过于热情

另一种方法是使用更大且更易于定制的工具,例如 Apache Solr。

于 2012-10-13T00:56:24.893 回答
1

您可以在使用 Postgres 全文搜索时修改字典,如此此处所述。

但是,由于 mu 太短,您可能最好使用更高级的工具。对于这种事情,我更喜欢Thinking Sphinx 。

于 2012-10-12T23:09:41.357 回答
0
Class.all(:conditions => ["attribute LIKE ?", "array%"]) 

应该这样做,我已经使用 Rails 2 有一段时间了,所以可能有更好的方法,但可以解决问题。

于 2012-10-12T21:40:32.730 回答