Search 使用多个搜索插件为网站设计AJAX驱动的Quicksilver式搜索

Search 使用多个搜索插件为网站设计AJAX驱动的Quicksilver式搜索,search,Search,我正在尝试为我们在工作中开发的内部web应用程序构建一个风格搜索系统。有很多使用JQuery或MooTools或其他工具的非常酷的前端示例。这些示例都没有真正谈到后端。据我所知,这些示例假设后端正在搜索单个表或至少执行单个查询。我想做的是设计一个系统,在这个系统中,你可以,逐字逐句地,键入任何东西,然后找到你想要的东西。理想情况下,我希望能够为这个系统编写插件,把它们放进去,然后开始搜索 我有一个解决方案,后端使用observer模式为每种类型的搜索将查询发送到不同的插件。但是,这会将所有插件的

我正在尝试为我们在工作中开发的内部web应用程序构建一个风格搜索系统。有很多使用JQuery或MooTools或其他工具的非常酷的前端示例。这些示例都没有真正谈到后端。据我所知,这些示例假设后端正在搜索单个表或至少执行单个查询。我想做的是设计一个系统,在这个系统中,你可以,逐字逐句地,键入任何东西,然后找到你想要的东西。理想情况下,我希望能够为这个系统编写插件,把它们放进去,然后开始搜索

我有一个解决方案,后端使用observer模式为每种类型的搜索将查询发送到不同的插件。但是,这会将所有插件的结果作为一个块返回。如果有多种搜索方式,搜索速度可能会明显变慢。我希望它能以一种更异步的方式快速返回结果,结果一进来就显示出来,比如LaOSX的聚光灯或Quicksilver

另一个解决方案是动态编写一个javascript数组,其中包含要使用的插件的名称。然后,我可以使用查询分别调用服务器,每个插件调用一个。这个解决方案似乎有点。。。向我走开。不过,我不能确切地说

因此,我的问题是:对于构建基于插件的搜索系统,有没有更好的解决方案?在加载页面并尽快返回结果之前,各个搜索类型是未知的?您可以使用Ajax中的长轮询来获取搜索结果。为脚本留出一个调用位置,以便在所有插件进入时返回结果。此方法允许您更快地获得显示的快速结果

拥有一系列插件是一种选择,但是一些浏览器一次只能有2个请求,这样会限制刚刚启动的请求量,并可能导致快速进程不得不等待缓慢的进程

这听起来像你正在接近后端,你只是让它提供数据,因为它来了。此外,这将允许您在不影响JS的情况下动态添加和删除插件,因此无需担心缓存的数组列表

从评论中对后端的一些想法。构建一个工作队列,以便搜索请求可以分发给许多工作人员。可以在数据库中或通过web服务实现工作队列,这样您就可以使用其他语言甚至计算机来完成每次搜索的工作。工作调用需要一些id才能传回,以便将数据定向到正确的客户端。此外,您还需要一种从队列中删除作业的方法,或者至少在客户机离开时将该客户机的所有工作标记为void。(如果使用长轮询,您应该能够检测到这一点。)

连接限制

用于HTTP1的IE7 4

用于HTTP1.1.2的IE7

用于HTTP16的IE8

用于HTTP1.1 6的IE8

另一个解决方案是动态编写一个javascript数组,其中包含要使用的插件的名称。然后,我可以使用查询分别调用服务器,每个插件调用一个。这个解决方案似乎有点。。。向我走开。不过,我不能确切地说

这似乎不是一个坏的选择。它能给你所需要的一切

  • 您需要搜索结果尽快返回
  • 我相信,它可以让你使用现有的插件架构
  • 它遵循这个原则 这不是一个新的解决方案,但我认为这是最简单的


    问候。

    从所有的评论和谈话来看,您似乎希望在前端构建此功能

    不要构建一个插件数组来调用它,这会迫使您在更换插件时担心缓存问题,而您应该做的是构建一个引导系统。这将是一个简单的ajax调用,它得到一个插件列表,其中包含要调用的URL。这将允许您从一个中心位置打开和关闭插件,它将工作得更好


    您必须将每个插件制作成一个web服务,而不是一个插件,这样每个插件都可以独立调用。确保使用mediasalve的连接数,因为如果你不避开它,它将受到浏览器的限制

    您在后端使用的是什么语言?PHP,这并不重要,因为PHP没有内置的并发编程支持。我打算提出一些需要它的建议。有没有可能改用支持线程的东西,比如Ruby、Python或Perl?它确实支持并发编程。只是蹩脚的支持。i、 它只有fork(),我不确定它的工作情况如何。如果我找不到一个像样的PHP解决方案,我可以使用Ruby或Python。PHP不仅仅具有fork()。它有proc_open(),但这不是一个很好的解决方案。你把你想做的工作作为一个字符串传入。也许将来你可以通过lambdas考试。我的问题也在后端。使用我现在的解决方案,每次搜索都必须在下一次运行之前完成。这是我实现observer模式的方式的一个限制。我曾研究过分叉进程或进行异步调用,但显然这在PHP中是一个巨大的难题。每个搜索插件都有一个队列,您可以将工作从调用推送到每个队列。插件可以配置为有工作池或只有一个工作池,并根据需要执行搜索。结果会传递回comet样式的解决方案,并推送到客户端。这将允许您使用PHP中的线程执行工作,甚至可能使用其他语言,具体取决于您的队列系统。默认情况下,哪些浏览器受到如此大的限制?我不是