0

我正在开发一个搜索项目,以构建一个搜索数百万个文档的搜索引擎,需要帮助了解现有的最佳方法是什么,起点等。我还尝试过 ElasticSearch 和 Apache SOLR,比如大约 1000 万文件,但他们需要的时间是几秒钟(2-4 秒)。

4

3 回答 3

2

对于数以百万计的文档和相当快的全文搜索,您将无法使用术语文档矩阵或其他类型的倒排索引等方法绕过适当的搜索引擎。

我建议阅读全文搜索引擎基础知识以获得最重要的想法,然后寻找一个可以满足您需求的优秀库。(如果您不准备投入大量时间,我不建议您编写自己的搜索引擎。)

推荐阅读:

(不确定你是否需要这些指针,如果你已经知道这些东西,对你有好处。;))


=> 至于使用什么的实际建议:我成功地使用了Apache 的 Lucene,这是一个用于 Java 的全文搜索引擎库。它在文档索引、标记化、词干提取、停用词等方面提供了很大帮助。它还使您能够将搜索从逻辑组合的关键字拼接在一起(例如,搜索“foo”但只显示不包含“bar”的文档或'qux 等)。

当时我索引了几百万个文档,并且能够在很短的时间内获得搜索结果,即没有明显的延迟。

于 2012-11-28T12:22:54.633 回答
1

Sphinx ( http://sphinxsearch.com/ ) 是另一个专门用于全文搜索的软件,具有与 Lucene 接近的一组功能,除了它是具有客户端 API 和多种语言绑定的独立服务器。

一些知名网站,如 craiglist 将其用作搜索引擎,结果非常好,如网站所述:

据传,免费分类广告网站 Craigslist.org 每天针对 Sphinx 发起约 250,000,000 万次查询。信不信由你,这是通过 15 个集群 Sphinx 盒子完成的,在高峰期只消耗它们总容量的 1/4。

于 2012-11-28T13:11:09.867 回答
0

ElasticSearch 建立在 Lucene 之上,主要关注引擎的“弹性”。如果每个文档不大,10M 文档可以放入内存,那么可以考虑高级解决方案,例如 SRCH2,它可以支持毫秒级的搜索,具有许多高级功能。

于 2012-11-29T08:22:28.940 回答