1

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

在http://lucene.apache.org/solr/上查看 solr, 它的所有设置都包括一个使用码头的示例安装。如果您不使用通配符字段并开始使用java -jar start.jar

一旦服务器在我刚刚忘记的默认端口上运行,您就有一个接口,您可以使用 http post 将新文档发送到该接口。您可以从每个应用程序服务器的 php 中执行此操作。如果您包含提交标志,则 solr 将索引它并提交更改。

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

但是您的服务器将管理比使用 zend 多 1000 倍的请求,因为一切都已启动并正在运行,加载了 lucene 并且可以立即处理查询。

只需查看此分步教程,您就可以了:http: //lucene.apache.org/solr/tutorial.html

如果您不喜欢所有这些并且无论如何都想坚持使用zend:

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

有任何问题,让我知道。

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

于 2010-08-23T16:49:20.203 回答