Zend_Search_Lucene,如何通过网络共享索引存储文件夹

时间:2010-08-23 16:20:53

标签: php lucene load-balancing nfs zend-search-lucene

我在两个不同的服务器上运行Web应用程序并进行负载平衡,并使用Zend_Search_Lucene来索引文档。

现在我面临索引问题,即用户通过服务器#1访问网站并存储信息,Zend_Search_Lucene仅存储索引服务器#1。

因此,一旦另一个用户通过服务器#2访问该站点并进行搜索,则只检索服务器#2中的索引。

有没有办法共享两个服务器都要访问的索引存储文件夹? 或者有没有办法在mysql数据库中存储索引,而不是文件系统?

1 个答案:

答案 0 :(得分:2)

好的,请不要伤害我,因为我不会给你一个问题的确切答案,但给你一个替代方案。

请不要使用zend,它非常慢。相信我。它只是一个糟糕的实现,必须为每个搜索请求完全加载。只是做一些基准,你会注意到。

lucene确实支持分片(将索引分发到多个服务器并合并分别获取的结果)

它也支持复制,这对你来说是更好的

所以这里有实际有用的部分:

http://lucene.apache.org/solr/查看solr 它的所有设置都包含使用jetty的示例安装。 如果你不使用通配符字段并使用java -jar start.jar

启动它,你raelly不必做任何事情而不是自定义你的字段

一旦服务器在我刚刚忘记的默认端口上运行,你就有了一个inderface,您可以使用http post发送新文件。 你可以从每个应用程序服务器的php中做到这一点。 如果包含提交标志,solr将对其进行索引并提交更改。

您可以使用http接口和solr查询参数查询索引。然后你得到一个整洁的json或xml formattet文档。 如果遇到任何负载问题,可以复制服务器。

但是你的服务器将管理的请求数量是你使用zend的1000倍以上,因为一切都已启动并运行,加载了lucene,并且可以立即调查查询。

请查看此分步教程,您应该没问题: http://lucene.apache.org/solr/tutorial.html

如果你不喜欢这一切并且想要坚持使用zend:

数据库本质上是不可能的,但你可以编写一个包装器。然而,这将是荒谬的。 在这种情况下,最好的办法是建立一个网络文件系统!

任何问题,知道。

ps:当你遇到这个选择时,建议使用dismax,在大多数情况下它会更快。