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