PostgreSQL和MySQL的全文本搜索
PostgreSQL和MySQL的全文搜索系统如何比较?有没有明显比奇特更好的东西?它们在哪些方面有所不同?
解决方案
不幸的是,我对PostgreSQL并不熟悉,但是如果我们在MySQL中使用FULL TEXT搜索,则会立即与MyISAM绑定。如果我们想使用InnoDB(并且ACID合规性对我们来说意味着什么,那么我们应该使用InnoDB)将使我们无法使用其他解决方案。
经常推出的两种流行替代方法是Lucene(如果使用PHP,则是带有Zend模块的apache项目)和Sphinx。
我认为我们可以将Sphinx与MySQL和Postgres一起使用。
这是一篇文章,说明如何将Sphinx与MySQL结合使用(我们可以将其添加为插件)
PostgreSQL 8.3内置了全文搜索,它是" tsearch2"的集成版本
这里是文档:http://www.postgresql.org/docs/8.3/static/textsearch.html
和文档中的示例:
SELECT title FROM pgweb WHERE to_tsvector(body) @@ to_tsquery('friend');
其中body是文本字段。我们可以为这些类型的搜索专门建立索引,当然,它们会比此简单示例更复杂。该功能非常可靠,值得我们做出决定。
祝你好运。
如果我们将Hibernate用作ORM,则强烈建议我们使用Hibernate搜索。它建立在Lucene之上,因此超级快。
卡尔
我在postgresql / tsearch2方面有相当不错的经验,尤其是因为它已被集成到标准发行版中(在8.0版之前,我认为它是可选的contrib功能,升级到tsearch2需要一些工作)。
如果我没记错的话,我们必须在启动之前设置一些属性(模糊匹配,字典内容),而在其他数据库上,这些内容可以通过全文语法本身灵活地公开(我想到的是Oracle Text,尽管我知道那不是)与问题有关)。
Mysql全文搜索非常慢。它不能处理超过一百万的数据(每个查询几十秒)。
我没有使用postgresql全文搜索的经验。
我已经使用了sphinxsearch。它非常快速且易于使用。但是它并不那么强大。我的意思是搜索功能。例如,它不支持" abc?",其中"?"代表任何字符。
我也知道lucene。它功能强大,但很难学习。