我正在建设一个Django网站,我正在寻找一个搜索引擎。
一些候选人:
Lucene/Lucene with Compass/Solr
斯芬克斯
Postgresql内置全文搜索
MySQl内置全文搜索
选择标准:
结果相关性和排名
搜索和索引速度
易于使用,易于与Django集成
资源需求——站点将托管在VPS上,所以理想情况下搜索引擎不需要大量的RAM和CPU
可伸缩性
额外的功能,如“你的意思是?”,相关搜索等
任何使用过上述搜索引擎或其他不在列表中的引擎的人——我很想听听你的意见。
编辑:至于索引需求,由于用户不断地向站点输入数据,这些数据将需要不断地进行索引。它不必是实时的,但理想情况下,新数据在索引中显示的延迟不超过15 - 30分钟
我现在正在研究PostgreSQL全文搜索,它拥有现代搜索引擎的所有正确功能,非常好的扩展字符和多语言支持,与数据库中的文本字段很好地紧密集成。
但它没有用户友好的搜索操作符,如+或AND(使用& | !),我对它在他们的文档网站上的工作方式不太满意。虽然它在结果片段中有粗体匹配项,但匹配项的默认算法并不好。此外,如果你想索引rtf, PDF, MS Office,你必须找到并集成一个文件格式转换器。
OTOH,它比MySQL的文本搜索好多了,后者甚至不能索引三个字母或更少的单词。这是MediaWiki搜索的默认值,我真的认为它对最终用户没有好处:http://www.searchtools.com/analysis/mediawiki-search/
在我所见过的所有案例中,Lucene/Solr和Sphinx都非常出色。它们都是可靠的代码,并且在可用性方面有了显著的改进,所以这些工具都可以让搜索满足几乎所有人。
对于SHAILI - SOLR包括Lucene搜索代码库和组件,是一个很好的独立搜索引擎。
我现在正在研究PostgreSQL全文搜索,它拥有现代搜索引擎的所有正确功能,非常好的扩展字符和多语言支持,与数据库中的文本字段很好地紧密集成。
但它没有用户友好的搜索操作符,如+或AND(使用& | !),我对它在他们的文档网站上的工作方式不太满意。虽然它在结果片段中有粗体匹配项,但匹配项的默认算法并不好。此外,如果你想索引rtf, PDF, MS Office,你必须找到并集成一个文件格式转换器。
OTOH,它比MySQL的文本搜索好多了,后者甚至不能索引三个字母或更少的单词。这是MediaWiki搜索的默认值,我真的认为它对最终用户没有好处:http://www.searchtools.com/analysis/mediawiki-search/
在我所见过的所有案例中,Lucene/Solr和Sphinx都非常出色。它们都是可靠的代码,并且在可用性方面有了显著的改进,所以这些工具都可以让搜索满足几乎所有人。
对于SHAILI - SOLR包括Lucene搜索代码库和组件,是一个很好的独立搜索引擎。
我不了解Sphinx,但是对于Lucene和数据库全文搜索,我认为Lucene的性能是无与伦比的。只要你正确地设置了Lucene索引,无论你要搜索多少条记录,你都应该能够在10毫秒内完成几乎所有的搜索。
最大的障碍来了:就我个人而言,我认为在你的项目中集成Lucene并不容易。当然,设置它并不难,这样你就可以做一些基本的搜索,但如果你想充分利用它,获得最佳性能,那么你绝对需要一本关于Lucene的好书。
至于CPU和内存的需求,在Lucene中执行搜索并不会给CPU带来太多的任务,尽管索引你的数据是,尽管你不经常这样做(可能一天一次或两次),所以这不是一个很大的障碍。
它不能回答你所有的问题,但简而言之,如果你有大量的数据要搜索,并且你想要出色的性能,那么我认为Lucene绝对是一条出路。如果你没有那么多的数据要搜索,那么你也可以使用数据库全文搜索。在我的书中,设置MySQL全文搜索绝对更容易。
我会把mnoGoSearch添加到列表中。非常高性能和灵活的解决方案,它作为谷歌:索引器从多个站点获取数据,您可以使用基本标准,或发明自己的钩子,以获得最大的搜索质量。它还可以直接从数据库中获取数据。
这个解决方案今天还不太为人所知,但它满足了最大的需求。你可以编译并安装它,或者在独立的服务器上,甚至在你的主服务器上,它不需要像Solr那样多的资源,因为它是用C编写的,即使在小型服务器上也能完美运行。
一开始你需要自己编译,所以需要一些知识。我为Debian做了一个小脚本,可能会有帮助。欢迎任何调整。
当你使用Django框架时,你可以在中间使用PHP客户端,或者在Python中找到解决方案,我看到了一些文章。
当然,mnoGoSearch是开源的,GNU GPL。