我有一个大约700 Gb的Solr / Lucene索引文件。我需要索引的文档是实时读取的,每30分钟提交大约1000个文档,需要编制索引。在我的场景中,脚本每30分钟运行一次,索引尚未编制索引的文档,因为要求新文档尽快可以搜索,但这个过程会减慢搜索速度。
这是我索引最新文档的最佳方式,还是有其他更好的方法!
答案 0 :(得分:10)
首先,请记住Solr不是一个实时搜索引擎(尚未)。仍有work要完成。
您可以使用master/slave setup,其中索引在主服务器上完成,搜索在从服务器上。有了这个,索引不会影响搜索性能。在主服务器上完成提交后,强制从服务器从主服务器获取最新的索引。在从属服务器上复制新索引时,它仍在使用先前的索引处理查询。
另外,检查cache warming settings。请记住,如果这些设置过于激进,这可能会降低搜索速度。另请查看new searcher event上启动的查询。
答案 1 :(得分:4)
你可以轻松地使用Lucene。将索引拆分为多个部分(或者准确地说,在构建索引时,创建“较小”部分。)为每个部件创建搜索器并存储对它们的引用。您可以在这些单独的部件之上创建MultiSearcher。
现在,只有一个索引可以获取新文档。定期将文档添加到此索引,提交并重新打开此搜索器。
更新最后一个索引后,您可以使用之前打开的搜索者再次创建一个新的多搜索器。
因此,在任何时候,您将只重新打开一个搜索者,这将非常快。
答案 2 :(得分:2)
检查Lucene周围的http://code.google.com/p/zoie/包装器是否实时 - 从Linkedin捐赠的代码。
答案 3 :(得分:1)
^^我这样做,使用普通的lucene,非solr,它的效果非常好。但是不确定目前是否有一种solr方式可以做到这一点。 twitter最近使用lucene进行搜索,只需在任何更新时写入索引即可实时搜索。它们的索引完全驻留在内存中,因此更新/读取索引无关紧要并立即发生,只要一次只有一个写入程序,就可以在写入时始终读取lucene索引。
答案 4 :(得分:1)