我正在建设一个Django网站,我正在寻找一个搜索引擎。
一些候选人:
Lucene/Lucene with Compass/Solr
斯芬克斯
Postgresql内置全文搜索
MySQl内置全文搜索
选择标准:
结果相关性和排名
搜索和索引速度
易于使用,易于与Django集成
资源需求——站点将托管在VPS上,所以理想情况下搜索引擎不需要大量的RAM和CPU
可伸缩性
额外的功能,如“你的意思是?”,相关搜索等
任何使用过上述搜索引擎或其他不在列表中的引擎的人——我很想听听你的意见。
编辑:至于索引需求,由于用户不断地向站点输入数据,这些数据将需要不断地进行索引。它不必是实时的,但理想情况下,新数据在索引中显示的延迟不超过15 - 30分钟
我不了解Sphinx,但是对于Lucene和数据库全文搜索,我认为Lucene的性能是无与伦比的。只要你正确地设置了Lucene索引,无论你要搜索多少条记录,你都应该能够在10毫秒内完成几乎所有的搜索。
最大的障碍来了:就我个人而言,我认为在你的项目中集成Lucene并不容易。当然,设置它并不难,这样你就可以做一些基本的搜索,但如果你想充分利用它,获得最佳性能,那么你绝对需要一本关于Lucene的好书。
至于CPU和内存的需求,在Lucene中执行搜索并不会给CPU带来太多的任务,尽管索引你的数据是,尽管你不经常这样做(可能一天一次或两次),所以这不是一个很大的障碍。
它不能回答你所有的问题,但简而言之,如果你有大量的数据要搜索,并且你想要出色的性能,那么我认为Lucene绝对是一条出路。如果你没有那么多的数据要搜索,那么你也可以使用数据库全文搜索。在我的书中,设置MySQL全文搜索绝对更容易。
我很惊讶没有更多关于Solr的信息。Solr与Sphinx非常相似,但具有更高级的功能(我没有使用过Sphinx,只是阅读过它)。
下面链接的答案详细介绍了一些关于Sphinx的事情,这也适用于Solr。
全文搜索引擎的比较- Lucene, Sphinx, Postgresql, MySQL?
Solr还提供了以下附加特性:
Supports replication
Multiple cores (think of these as separate databases with their own configuration and own indexes)
Boolean searches
Highlighting of keywords (fairly easy to do in application code if you have regex-fu; however, why not let a specialized tool do a better job for you)
Update index via XML or delimited file
Communicate with the search server via HTTP (it can even return Json, Native PHP/Ruby/Python)
PDF, Word document indexing
Dynamic fields
Facets
Aggregate fields
Stop words, synonyms, etc.
More Like this...
Index directly from the database with custom queries
Auto-suggest
Cache Autowarming
Fast indexing (compare to MySQL full-text search indexing times) -- Lucene uses a binary inverted index format.
Boosting (custom rules for increasing relevance of a particular keyword or phrase, etc.)
Fielded searches (if a search user knows the field he/she wants to search, they narrow down their search by typing the field, then the value, and ONLY that field is searched rather than everything -- much better user experience)
顺便说一下,还有很多功能;但是,我只列出了在生产中实际使用的特性。顺便说一句,MySQL支持上述列表中的#1、#3和#11(有限)。对于您正在寻找的特性,关系数据库并不能满足您的需求。我会马上消除这些。
另外,Solr(实际上是Lucene)是一个文档数据库(例如NoSQL),因此任何其他文档数据库的许多优点都可以通过Solr实现。换句话说,您可以将它用于不仅仅是搜索(即性能)。要有创意:)