有(无)Solr的分面搜索

4
我想为我的项目实现一个分面搜索。我正在使用PHP5MysqlSymfony 1.4。显然,社区指向Apache Solr,它似乎可以完全实现我的目标。
问题在于,网站将在不允许我设置Solr的托管提供商上线(这是共享托管环境,既不允许Tomcat也不允许Solr运行)。
所以,请您给我提供可能的替代方案或者是否有一种方法可以在这样的环境中设置Solr

编辑
我的托管提供商既不支持SOLR,也不支持opensolr等解决方案。通常情况下,我无法使用我的环境连接到同一服务器或远程服务器上的进程。似乎唯一可用的选项是使用Zend_Search_Lucene。那么它是否支持分面搜索?或者如果您有其他选项,请分享!我感觉自己处于无人区!

编辑2
由于这个问题已经开放了大约一个星期,从迄今为止给出的答案来看,我感到惊讶(和失望)的是,在PHP中没有库(而不是服务)可用于实现分面搜索。似乎要么手动实现这一点,要么使用下面提供的解决方案。

3个回答

2

更改主机或将Solr索引托管到其他地方 - 例如,快速搜索显示http://www.opensolr.com/提供Solr托管,毫无疑问还有许多其他选择。


感谢您的输入。这些解决方案需要在某个端口(即8080)上具有未阻止的出站连接。我不确定我的共享托管环境是否支持此功能,我会给他们发电子邮件询问一下。此外,在这种设置中可能会存在性能问题。我倾向于在同一服务器上使用开源解决方案(甚至是定制的最佳情况)。 - pankar

1

性能不会很好,而且不讨论扩展性,但您始终可以在HTTP上创建反向HTTP隧道。基本上,与其Web服务器打开到Solr服务器的出站连接,Solr服务器连接到Web服务器请求作业并发布作业结果。

您需要执行以下操作:

  1. 浏览器发布搜索查询,查询仅在数据库中排队。
  2. 反向代理定期连接到Web服务器(通过普通的80端口)从作业队列中获取查询列表,将查询传递给Solr服务器,并将结果POST回Web服务器。
  3. 浏览器定期轮询已完成的搜索结果。

额外加分:如果您的服务器允许并发请求处理,请使用长轮询来提高延迟。

简而言之,咬紧牙关,转移到一个体面的主机。


这是一个非常有趣的方法。事实上,我甚至不知道“反向HTTP隧道”的存在。正如你所想象的那样,在我的可怜环境中我无法使用这样的服务器... - pankar
@pankar:是的,反向代理和Solr服务器必须放在您当前服务器之外。但是您当前的Web服务器可以保持不变;作业队列的管理可以使用普通的PHP编写,而不需要任何花哨的技巧。我不太确定哪个更容易,实现自制的分面搜索还是自制的作业排队。 - Lie Ryan

0

尽量避免使用Zend_Search_Lucene,它并不是真正的快速。 (好吧,考虑到它是用Php实现的,并且不作为守护进程运行,它还是相当不错的)

像Paul建议的托管Solr听起来是一个不错的选择 - 如果您不想更改主机。


感谢您的反馈。就像我在我的编辑中所说的那样,由于共享主机的限制,我无法使用opensolr等替代方案,因为我无法建立到任何端口的出站连接...!@#$。 - pankar
请注意,与Solr通信只需要使用Http协议,因此如果有可用的Http代理,您可以通过代理进行通信。 - Niko Sams
无论是进程间通信、http还是SOAP/XML,共享主机都会阻止所有端口的出站流量。 - pankar
@pankar:你用的是什么愚蠢的共享主机?我用过的所有共享主机都允许创建出站HTTP流量,有些甚至允许打开本地端口以供像Solr这样的内部应用服务器使用。省点麻烦,换一个好一点的主机吧。 - Lie Ryan
@Lie Ryan,我从官方得到的回复是,他们不支持出站流量,我需要升级到另一个套餐才能拥有此功能... 如果这是我的网站,我早就已经这样做了...(转移到一个好的主机) - pankar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接