回答
你在找什么是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。
正是! PostgreSQL全文搜索比'LIKE'好,而且它已经内置了。尝试一下,看看它如何适用于您的应用程序。如果效果很好,很好:你完成了,没有额外的运动部件。如果没有,部署Sphinx或Solr--无论是在搜索方面的能力还是坦率地更高,但使用单独的搜索服务器会增加操作的复杂性。有时PostgreSQL是正确的选择,有时候不是。 – willglynn
Class.all(:conditions => ["attribute LIKE ?", "array%"])
应该这样做,我一直与梁2一会儿所以概率一个更好的方式,但会做的伎俩。
但是如果你搜索“鹅”会发生什么?应该搜索“the”找到“词库”吗? –
取决于你想如何设置它我猜,你可以在搜索查询中使用singluarize和pluralize方法并返回两者?你想要达到什么目的? – cih
使用Postgres全文搜索时,可以修改字典here和here。
但是,由于mu太短,所以您可能更适合使用更高级的工具。我更喜欢Thinking Sphinx,这种事情。
不需要修改字典只是为了处理复数。大量不同语言的标准词干词典。 –
- 1. Oracle中复杂查询的问题
- 2. 重复问题与查询
- 3. 多重查询的复杂SQL问题
- 4. 复杂的交叉表查询问题
- 5. Oracle查询重复的记录问题
- 6. 复杂的SQL查询问题
- 7. 复杂的SQL查询问题
- 8. 复杂的MySQL查询问题
- 9. LINQ查询复杂的联接问题
- 10. Extbase复杂的查询问题
- 11. 复杂的MySQL查询问题
- 12. 复杂的MySQL查询问题
- 13. DataGrid中的数据重复。问题与LINQ查询
- 14. SQL查询中的计数问题
- 15. Perl中的Mysql查询参数问题
- 16. SQL查询中的问题
- 17. MySQLi查询中的问题
- 18. mongodb中的查询问题
- 19. Mysql查询中的问题
- 20. Yii中的查询问题
- 21. 查询中的Django问题
- 22. 数据库查询问题
- 23. MySQL查询,计数问题
- 24. 参数化查询问题
- 25. MySQL查询计数问题
- 26. 数据库查询问题
- 27. 问题查询数据库
- 28. 媒体查询修复问题
- 29. MS Access查询复杂问题
- 30. 问题的查询
你可能用全文检索系统更好。 –