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

时间:2009-11-19 03:36:23

标签: multithreading search lucene performance

我正在编写电话本搜索,它将查询多个远程信息源,但我想知道如何最好地完成此任务。

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

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

是否存在可以使用和扩展的商业或开源解决方案,或者我可以使用的智能算法是否已经错过了?

由于

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

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

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

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

希望有所帮助。