什么是同时搜索多个来源的最佳方式?

问题描述:

我正在写电话簿搜索,这将查询多个远程来源,但我想知道如何处理这个任务是最好的。什么是同时搜索多个来源的最佳方式?

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

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

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

感谢

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

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

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

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

如果您只有几个来源,比如10,并且您将每个来源的结果数量限制为10,那么实际上不应该花费太多时间在任何编程语言中对它们进行排序。如果您的远程资源不可用,请确保您可以恢复。如果让我们说,您正在等待所有10个来源再次显示数据 - 如果其中一个来源停止,您可能会等待很长时间。

另一种方法是给用户。有点像飞机票搜索网站 - 它们让你在收集和分类结果时需要几秒钟的时间。我真的很喜欢Kayak.com的实施 - 因为它让我觉得它不像其他网站那样做。

希望有所帮助。