我在查询中遇到了复数问题。我需要一种 Ruby 方法或 SQL 语句,可以帮助我进行搜索。例如:
当我搜索“arrays”时, 我希望它也能返回“array”的结果。
谢谢。
当我搜索“arrays”时, 我希望它也能返回“array”的结果。
谢谢。
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)
LIKE
好多了,而且已经内置了。尝试一下,看看它对你的应用程序有何作用。如果效果不错,太棒了:你完成了,没有额外的移动部件。如果效果不佳,可以部署Sphinx或Solr——两者都更加强大,搜索效果更好,但使用单独的搜索服务器会增加操作复杂性。有时候,选择PostgreSQL是正确的选择,有时候则不是。 - willglynn当使用Postgres全文搜索时,您可以根据此处和此处的说明修改字典。
但是,正如mu is too short所提到的那样,您最好使用更高级的工具。我更喜欢Thinking Sphinx这种工具来完成这种任务。
Class.all(:conditions => ["attribute LIKE ?", "array%"])
应该可以了,我已经使用Rails 2一段时间了,可能有更好的方法,但这样也能解决问题。