我正在开发一个搜索项目来构建一个搜索数百万个文档的搜索引擎,需要帮助解决已经存在的最佳方法,起点等等。我也试过ElasticSearch和Apache SOLR来说约1000万份文件,但他们花费的时间是秒(2-4秒)。
答案 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等高级解决方案,它可以在几毫秒内支持具有许多高级功能的搜索。