這實際上是我正在處理的一個真正的問題,但爲了簡單起見,我們假裝我是Google。什麼是算法來搜索索引的多個值?
假設用戶搜索「nanoscale tupperware」。沒有很多頁面,只有大約3k。但是,有200萬頁「納米級」和400萬「特百惠」。儘管如此,谷歌在0.3秒內爲我找到了3k。
它是如何做到的?
我知道的唯一算法是獲取「nanoscale」的文檔,獲取「tupperware」的文檔,然後執行列表合併。但那是O(N + M),或者O(5,000,000),看起來有點慢。特別是如果我在桌面上運行它而不是超高速集羣。
那麼Google究竟在做什麼,他們的速度主要是因爲他們在他們的大規模分佈式集羣上運行這種昂貴的計算?
或者有沒有更好的算法,我不知道?維基百科和谷歌沒有爲我提供任何東西。
編輯:
由於人們似乎把重點放在我的問題的谷歌方面,我想我會在實際的條款再說一遍。
我有幾個非常大的(數百萬項)索引實現爲鍵/值對。鍵是簡單的詞,值是文檔集。一個常見的用例是在不同索引上對多個搜索結果進行交集:難點在於獲取文檔集的交集。
我可以重新實現我的索引,但是我想要的 - 這主要是一個學術項目。
可能有很多巧妙的緩存涉及...... – 2010-02-22 19:05:16
我確信有,以及一百萬其他聰明的優化。但我真的懷疑他們正在緩存搜索結果*,所以我仍然好奇 - 他們使用什麼算法來實際獲取結果列表? – levand 2010-02-22 19:10:05
谷歌有索引。很多指數。可能是抓住預先生成的單詞'nanoscale'的索引,然後爲列出的每個頁面查看預先生成的該頁面中所有單詞的排序列表,以查看是否發生「tupperware」。這部分將大規模分發。它會緩存結果,以便下次搜索相同的術語時,它只會抓取預先生成的「納米級特百惠」索引。可以想象,谷歌已經預先生成了按頻率排列的前10,000個英語單詞中的任何兩個的每個可能組合的索引:它僅「是」1億個頁面列表。 – 2010-02-22 19:10:49