2009-11-19 99 views
3

我正在寫電話簿搜索,這將查詢多個遠程來源,但我想知道如何處理這個任務是最好的。什麼是同時搜索多個來源的最佳方式?

最簡單的方法是執行查詢,爲每個遠程源查詢啓動一個線程(限制最大結果爲10),等待所有線程的結果並將列表聚合爲總共10個條目並返回它們。

但是......如果所有的源都返回至少10個結果,那麼哪個遠程源更重要,那麼我就必須對搜索結果進行搜索。雖然這會產生準確的信息,但它看起來效率低下,不可能很好地擴大規模。

是否有解決方案商業或開源,我可以使用和擴展,或者有一個聰明的算法,我可以使用,我錯過了?

感謝

回答

2

約翰,我相信你想要的是federated search。我建議你檢查出Solr作爲一個框架。我同意尼克的觀點,你必須親自評估不同來源的相對質量,並建立合併功能。 Solr有一些基礎設施,如email thread所示。

0

說實話,我還沒有看到一個現成的解決方案,但是這就是爲什麼我們程序員存在:創建一個解決方案,如果一個不容易availble的:-)

的方式我會這與你描述的類似:使用線程 - 如果這是一個web應用程序,那麼ajax是你的朋友,速度和可用性,對於桌面應用程序gui表示甚至不是問題。

這聽起來像你不能確定或猜測哪個來源是最好的可靠性,速度&結果數量。所以你需要設置你的程序,以便它確定最佳結果。假設您有10個數據源,並且有10個線程。當你啓動你的線程時 - 等待第一個返回的結果> 0.這將是你的「主」結果。當其他線程返回時,您可以將它們與您的「主」結果進行比較並添加新結果。如果你想提供獨特的結果,真的沒有辦法避免這種情況。只要你有第一個線程,你就可以開始顯示結果。您不必立即更新您的屏幕,並在所有新結果進入時立即更新,但如果需要一些時間,用戶可能會變得激動不安。如果您的實例超過10個,您可以擁有某種指標,顯示更多結果可用。

如果您只有幾個來源,比如10,並且您將每個來源的結果數量限制爲10,那麼實際上不應該花費太多時間在任何編程語言中對它們進行排序。如果您的遠程資源不可用,請確保您可以恢復。如果讓我們說,您正在等待所有10個來源再次顯示數據 - 如果其中一個來源停止,您可能會等待很長時間。

另一種方法是給用戶。有點像飛機票搜索網站 - 它們讓你在收集和分類結果時需要幾秒鐘的時間。我真的很喜歡Kayak.com的實施 - 因爲它讓我覺得它不像其他網站那樣做。

希望有所幫助。

相關問題