【问题标题】:What is the best way to search multiple sources simultaneously?同时搜索多个来源的最佳方法是什么?
【发布时间】:2010-12-18 03:48:46
【问题描述】:

我正在编写一个电话簿搜索,它将查询多个远程资源,但我想知道如何最好地完成这项任务。

执行此操作的最简单方法是进行查询,为每个远程源查询启动一个线程(将最大结果限制为 10 个),等待所有线程的结果并将列表聚合为总共 10 个条目并返回他们。

但是...如果所有来源都返回至少 10 个结果,那么哪个远程来源更重要,那么我将不得不对搜索结果进行搜索。虽然这会产生准确的信息,但它似乎效率低下并且不太可能很好地扩大规模。

是否有我可以使用和扩展的商业或开源解决方案,或者是否有我错过的可以使用的聪明算法?

谢谢

【问题讨论】:

    标签: multithreading search lucene performance


    【解决方案1】:

    约翰,我相信你想要的是federated search。我建议您查看Solr 作为此框架。我同意尼克的观点,你必须自己评估不同来源的相对质量,并建立一个合并功能。正如email thread 所示,Solr 有一些基础设施。

    【讨论】:

      【解决方案2】:

      说实话,我还没有看到现成的解决方案,但这就是我们程序员存在的原因:如果没有现成的解决方案,就创建一个解决方案 :-)

      我会这样做的方式与您描述的类似:使用线程 - 如果这是一个 Web 应用程序,那么 ajax 是您的速度和可用性的朋友,对于桌面应用程序 gui 表示甚至不是问题。

      听起来您无法预先确定或猜测哪个来源在可靠性、速度和结果数量方面最好。因此,您需要设置您的程序,以便即时确定最佳结果。假设您有 10 个数据源,因此有 10 个线程。当您启动线程时 - 等待第一个返回结果 > 0。这将是您的“主”结果。当其他线程返回时,您可以将它们与“主”结果进行比较并添加新结果。如果你想提供独特的结果,真的没有办法避免这种情况。一旦有了第一个线程,您就可以开始显示结果。您不必在所有新结果出现时立即更新您的屏幕,但如果需要一些时间,用户可能会变得焦躁不安。例如,如果您有超过 10 个结果,您可以只使用某种指示符来显示更多可用结果。

      如果您只有几个来源,例如 10 个,并且您将等待的每个来源的结果数量限制为 10 个,那么在任何编程语言中对它们进行排序确实不应该花费太多时间。如果您的远程资源不可用,还要确保您可以恢复。假设您正在等待所有 10 个源返回显示数据 - 如果其中一个源关闭,您可能要等待很长时间。

      另一种方法是 f00l 用户。有点像机票搜索网站所做的 - 他们在收集和排序结果时让您想要几秒钟。我真的很喜欢 Kayak.com 的实现 - 因为它让我觉得它在做一些不同于其他网站的事情。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-25
        • 2010-10-17
        相关资源
        最近更新 更多