2012-06-08 52 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之后 - 您可以从映射中推断出它们引用的字符串。