我正在建设一个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搜索代码库和组件,是一个很好的独立搜索引擎。

其他回答

SearchTools-Avi说:“MySQL文本搜索,它甚至不能索引三个字母或更少的单词。”

从MySQL 5.0开始,MySQL全文的最小字长是可调的。谷歌'mysql全文最小长度'简单的指令。

也就是说,MySQL全文文本有局限性:首先,一旦你达到一百万左右的记录,它就会变得很慢,……

我现在正在研究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。

我们刚刚从Elasticsearch切换到Postgres Full Text。因为我们已经使用了Postgres,所以我们现在省去了保持索引更新的麻烦。 但这只影响全文搜索。然而,在某些用例中,Elasicsearch明显更好。也许是面或类似的东西。