2012-06-08 115 views
1

我想用搜索查詢日誌做一些研究。我的第一個興趣是發現趨勢。例如:在冬天,人們經常感冒。所以我想在冬天我們可以看到這類查詢的增長。查找搜索引擎查詢日誌的趨勢

如何我想探測的發展趨勢:

  1. 使用apriory算法或收穫的人設置一個頻繁項。
  2. 在一個時間範圍內的每個組(一小時,一天等)
  3. 使用線性迴歸來發現相對函數變化 的計數數,如果這是一個迴歸AX + b,則我們只是計算(A *(FIRST_DATE )+ b)/(A *(SECOND_DATE)+ b)

所以我有一個問題: 這很難在大型數據集(我有百萬的查詢)的設置中發現頻繁項。我已經實施了apriory算法,但它的工作速度很慢,支持度低(例如,對於200k查詢中的2個查詢可能需要一天)

對我而言,什麼是最佳算法?也許我可以用另一種方式解決我的任務?

+0

@Yavar我只有一臺機器(或兩個)。所以這就是爲什麼我不能分發。 – Neir0

回答

0

這是一個大問題,它將縮小到僅計算所需時間範圍內的字符串,而不是整個集合。
將您的查詢存儲在已排序的可擴展數據結構中 - 我認爲skip list將會非常合適。
跳過列表中查詢的順序將按時間升序排列。
注意:將新查詢添加到跳過列表非常簡單 - 您總是將其追加,因爲它始終是「較大」(發生在所有現有查詢之後)。

現在,當您需要搜索時間範圍時 - 您不需要遍歷所有查詢,而是需要遍歷所有查詢的相關部分,因爲可以完成查找時間範圍的第一個和最後一個元素在跳過列表中快速。

爲了提高效率,我使用雙映射爲每個字符串提供唯一的ID,並僅存儲ID。從ID中創建直方圖可能更容易(計算上講),然後爲原始字符串創建直方圖。在找到最常用的ID之後 - 您可以從映射中推斷出它們引用的字符串。