但是,如果我想在Heroku上使用Sphinx或Solr,我需要支付一个附加组件。
我注意到Postgresql(在Heroku使用的数据库)有内置的全文搜索能力。
有没有原因,我不能使用Postgres的全文搜索?它比Sphinx慢还是有其他一些主要的限制?
如果你对Postgres和Lucene感兴趣,为什么不呢?查看Postgres的ZomboDB扩展,它将Elasticsearch集成为第一类索引类型。仍然是一个相当早期的项目,但它看起来真的有希望我。
> https://github.com/zombodb/zombodb
(技术上不在Heroku上,但仍值得一看。)
披露:我是Websolr和Bonsai Heroku附加组件的共同创始人,所以我的观点有点偏向卢塞恩。
我对Postgres全文搜索的看法是,它对于直接的用例是相当固定的,但有很多原因为什么Lucene(以及因此Solr和ElasticSearch)在性能和功能方面都优越。
对于初学者,jpountz提供了一个真正优秀的技术答案的问题,Why is Solr so much faster than Postgres?这是值得一两读,真的消化。
我还评论了一个recent RailsCast episode比较Postgres全文搜索与Solr的相对优缺点。让我在这里回顾一下:
Postgres的实用优势
>重复使用您已在运行的现有服务,而不是设置和维护(或支付)其他东西。
>远远优于异常缓慢的sql LIKE操作符。
>减少保持数据同步,因为它都在同一个数据库 – 没有应用程序级集成与一些外部数据服务API。
Solr(或ElasticSearch)的优点
在我的头顶,没有特定的顺序…
>单独缩放索引和搜索负载与常规数据库负载。
>更灵活的术语分析,如语调标准化,语言词干,N-gram,标记移除…其他酷的功能,如拼写检查,“丰富的内容”(例如,PDF和Word)提取…
> Solr / Lucene可以做的一切在Postgres full-text search TODO list只是罚款。
>更好和更快的术语相关性排名,在搜索时高效定制。
>对于常见字词或复杂查询,搜索效果可能会更快。
>可能比Postgres更高效的索引性能。
>通过从主数据存储区中分离索引,更好地适应数据模型中的更改
显然,我认为基于Lucene的专用搜索引擎是更好的选择。基本上,你可以认为Lucene是事实上的搜索专家的开源库。
但是如果你唯一的其他选项是LIKE运算符,那么Postgres全文搜索是一个明确的胜利。