Postgres / Rails查询中的多个问题

时间:2012-10-12 21:29:57

标签: sql ruby-on-rails ruby regex postgresql

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

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

由于

3 个答案:

答案 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全文搜索时,您可以修改字典herehere

但是,由于提到mu太短,你可能更适合使用更高级的工具。对于这种事情,我更喜欢Thinking Sphinx

答案 2 :(得分:0)

Class.all(:conditions => ["attribute LIKE ?", "array%"]) 

应该这样做,我已经使用Rails 2了一段时间,所以有一个更好的方法但是会做到这一点。