搜索数百万个文档的最佳方法是什么?

时间:2012-11-28 10:27:16

标签: search full-text-search search-engine

我正在开发一个搜索项目来构建一个搜索数百万个文档的搜索引擎,需要帮助解决已经存在的最佳方法,起点等等。我也试过ElasticSearch和Apache SOLR来说约1000万份文件,但他们花费的时间是秒(2-4秒)。

3 个答案:

答案 0 :(得分:2)

对于数百万个文档和速度相当快的全文搜索,您无法使用Term Document Matrix或其他类型inverted indexing等方法找到合适的搜索引擎。

我建议阅读了解全文搜索引擎基础知识,以获得最基本的想法,然后寻找一个能够满足您需求的好库。 (如果你不准备投入一些重要的时间,我不会建议你自己编写搜索引擎。)

推荐阅读:

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


=>关于使用什么的实际建议:我使用Apache's Lucene成功,这是一个Java的全文搜索引擎库。它为文档索引,标记化,词干,停用词等提供了很好的帮助。它还使您能够从逻辑组合的关键字中搜索您的搜索(例如搜索'foo'但仅显示不包含'bar'的文档或'qux等。)。

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

答案 1 :(得分:0)

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

一些备受瞩目的网站如craiglist将其用作搜索引擎,效果非常好,如网站所述:

  据传,Craigslist.org是一个免费的分类广告网站,每天针对Sphinx发起大约250,000,000,000次查询。信不信由你,这是通过15个聚类Sphinx盒实现的,在高峰时间只消耗其总容量的1/4。

答案 2 :(得分:0)

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