问题:从2个月前到1个月前的时间之间找到日志行,这些日志行必须包含几个指定的单词(甚至不需要正则表达式,尽管使用它们会很好)。
捕获:有20T +的日志(gzipped!)要筛选,搜索必须快速(最好在几秒钟内完成)。
我的第一个想法是使用PyTables,因为我将各种数值数据与日志行时间戳和日志行本身存储在Pandas中(我可以使用表格格式IIRC存储在Pandas的HDFStore中),使用内置的PyTables查询。我还没有解析整个数据集,只有一小部分日志(用于分析目的)。我已完成基本的解析部分(提取时间戳,一些关键参数,添加日志行,保存),但我还需要快速查询部分。
可行吗?有没有更好的Python解决方案?
我正在考虑使用Postgres中内置的文本索引器,直到我发现它无论如何都会对表格中的列进行线性扫描,所以我不妨使用grep ......
为简单的单词模式索引和扫描如此大的数据集,有什么可能是更好的解决方案(在Python中可用)?京都/东京内阁?
更新:(匿名)日志示例如下。
23419 2013-11-27 12:35:59 [INFO] 12772792:ce7429c9d63dc630dce613ccb5a0ae55:201311271235498008010001 func: item uploaded, path=tt6-nas/itemhome174/pool2/20131127/12/35/252273696_12772792.d
23419 2013-11-27 12:35:59 [WARNING] 12772792:ce7429c9d63dc630dce613ccb5a0ae55:201311271235498008010001 parse_zz: no test found: input=
23413 2013-11-27 12:35:59 [INFO] 15417668:a0f5116658f701fd848ac9fec3743c2c:201311271235578010010001 Test ok, funcname = zzz_get_results itemid = 15417668 ay_id = 959 ip = 22.222.22.22 session_id = a0f5116658f701fd848ac9fec3743c2c
23413 2013-11-27 12:35:59 [INFO] 15417668:a0f5116658f701fd848ac9fec3743c2c:201311271235578010010001 calling testfunc with args={'aa': False, 'medid': 15417668, '_objname': 'aa', '_clt_id': '46.238.87.23', '_pvid': '201311271235578010010001', 'limit': 3, '_login': 'aaa',...
23421 2013-11-27 12:35:59 [INFO] 5642372:1ebd76b4b5c43e36323faf846077a881:201311271235592288010001 calling item_get_info with args={'test': False, '_elemid': 5642372, '_session_id': '1ebd76b4b5c43e36323faf846077a881', ..
23421 2013-11-27 12:35:59 [INFO] 031 items:get_item=0. "time": 0.008256 query: url=http://hostname.tld:9603/getfunc?date=20131127&test1=7&limit=0&itemid=56119 body=85419:: NO_DATA
答案 0 :(得分:0)
我找到了解决方案:
http://swtch.com/~rsc/regexp/regexp4.html
https://code.google.com/p/codesearch/
我不敢相信这里没有人知道这一点,根据Russ Cox的指数,n-gram是“旧的信息检索技巧”。