我在两个不同的服务器上运行Web应用程序并进行负载平衡,并使用Zend_Search_Lucene来索引文档。
现在我面临索引问题,即用户通过服务器#1访问网站并存储信息,Zend_Search_Lucene仅存储索引服务器#1。
因此,一旦另一个用户通过服务器#2访问该站点并进行搜索,则只检索服务器#2中的索引。
有没有办法共享两个服务器都要访问的索引存储文件夹? 或者有没有办法在mysql数据库中存储索引,而不是文件系统?
答案 0 :(得分:2)
好的,请不要伤害我,因为我不会给你一个问题的确切答案,但给你一个替代方案。
请不要使用zend,它非常慢。相信我。它只是一个糟糕的实现,必须为每个搜索请求完全加载。只是做一些基准,你会注意到。
lucene确实支持分片(将索引分发到多个服务器并合并分别获取的结果)
它也支持复制,这对你来说是更好的
所以这里有实际有用的部分:
在http://lucene.apache.org/solr/查看solr
它的所有设置都包含使用jetty的示例安装。
如果你不使用通配符字段并使用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,在大多数情况下它会更快。