2010-08-23 138 views
1

我正在两个不同的服务器上运行Web应用程序并进行负载平衡,并使用Zend_Search_Lucene来索引文档。Zend_Search_Lucene,如何通过网络共享索引存储文件夹

现在我面临着用户通过服务器#1来存储信息的索引问题,Zend_Search_Lucene只存储索引服务器#1。

因此,一旦另一个用户通过服务器#2来搜索并且搜索,只有服务器#2中的索引被检索。

有什么办法可以共享一个索引存储文件夹,以便两台服务器都可以访问吗? 或者有什么方法可以将索引存储在mysql数据库中,而不是文件系统?

回答

2

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

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

Lucene的确实支持分片(分配指标到多台服务器和合并结果seperately牵强)

它也支持复制这将是一个更好的去为你

所以来这里的真正有用的部分:

退房solr在http://lucene.apache.org/solr/ 它的所有设置与示例安装使用jetty包括在内。 你raelly不必做任何事情超过自定义字段,如果你不使用通配符域和使用java -jar start.jar

启动它一旦服务器,我只是忘了它的默认端口上运行,你有一个inderface到你可以使用http post发送你的新文件。 你可以从你的每个应用程序服务器通过php来完成。 然后solr会索引它并提交更改,如果您包含提交标志。

您可以使用http界面和solr查询参数查询您的索引。那么你会得到一个整洁的json或xml formattet文档。 如果遇到任何加载问题,则可以复制服务器。

但是,如果您使用zend执行此操作,则您的服务器将处理的请求数量是您要求的1000倍以上,因为一切都已启动并正在运行,lucene已加载,查询可立即生效。

只是看看这个教程一步一步,你应该罚款: http://lucene.apache.org/solr/tutorial.html

如果你不喜欢这一切,仍要与Zend坚持:

数据库是不可能的贝性质,但你可以写一个包装。但这是荒谬的。 在这种情况下最好的做法是建立一个网络文件系统!

任何问题,让我知道。

ps:当你遇到选择时,建议使用dismax,在大多数情况下它的速度要快很多。

+0

Solr Java Lucene?我有一个应用程序当前使用PHP Lucene(Zend库),并计划更新到Java Lucene并使用Java桥接器。思考? – allnightgrocery 2010-08-23 17:00:32

+0

是它的100%java lucene。 jetty服务器作为应用程序服务器(替代方案是tomcat或其他)。您可以立即下载并开始使用的示例,其中包括jetty作为默认服务器,它由apache和顶级项目开发,并与lucene紧密协作。我重新设计了商业产品事实发现者的公司应用程序,我只能推荐它。它运行速度快,可靠作为一种魅力,并且非常灵活,但也非常灵活和可定制。 – 2010-08-23 17:29:44