Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 同时搜索多个源的最佳方法是什么?_Multithreading_Search_Lucene_Performance - Fatal编程技术网

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

Multithreading 同时搜索多个源的最佳方法是什么?,multithreading,search,lucene,performance,Multithreading,Search,Lucene,Performance,我正在编写一个电话簿搜索,它将查询多个远程源,但我想知道如何最好地完成这项任务 最简单的方法是执行查询,为每个远程源查询启动一个线程(将最大结果限制为10),等待所有线程的结果,并将列表聚合为总共10个条目并返回它们 但是…如果所有源返回至少10个结果,那么哪个远程源更重要,那么我必须对搜索结果进行搜索。虽然这将产生准确的信息,但它似乎效率低下,不可能很好地扩展 是否有一个商业或开源的解决方案我可以使用和扩展,或者有一个聪明的算法我可以使用,我错过了 感谢老实说,我还没有看到现成的解决方案,但这

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

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

但是…如果所有源返回至少10个结果,那么哪个远程源更重要,那么我必须对搜索结果进行搜索。虽然这将产生准确的信息,但它似乎效率低下,不可能很好地扩展

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


感谢

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

我的做法与您描述的类似:使用线程——如果这是一个web应用程序,那么ajax在速度和可用性方面是您的朋友,因为桌面应用程序gui表示甚至不是问题

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

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

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


希望能有帮助。

约翰,我相信你想要的是。我建议您将其作为一个框架进行检查。我同意Nick的观点,您必须自己评估不同来源的相对质量,并构建一个合并函数。Solr为此提供了一些基础设施,如图所示