solr/lucene 在中文搜索使用中,会输出非常多的类似下面的内容:2012-04-24 00:00:01,396 INFO [org.apache.solr.core.SolrCore] - [XXXX-0] webapp=null path=/select params={q=status:0+AND+(img_file_id:(++12333018751568476))&timeAllowed=2000sort=gmtcreate+desc&rows=60&start=0} hits=44 status=0 QTime=0这部分log 包含了查询条件,其中最有价值之一的就是中文词,大量的查询聚集出用户的查询喜好。对这些log的快速、低成本分析非常有助于应用中运营活动的推广。体现搜索引擎的数据密集价值之一!更深入的挖掘比如,带上性别信息、行业信息,就可以深入掌握用户关注什么、行业动态是什么等商业信息。这也是很多搜索引擎在广告之外的另一项收入。下面提供一种基于脚本的针对solr/luene log中。查询条件中的中文词提取并总计排序。针对单个文件的统计输出,批量处理,添加一个find,然后循环文件即可。注意事项: 这个脚本在1G左右单个log文件解析时,时间大约2分钟。 在解析期间,服务器load明显增多,在线解析log需要避开服务器高峰期 解析调试需要注意编码 中英文混合时,英文部分会被忽略 有些标点符号以及一些特殊字符在不同版本、不同环境下会有所不同,不影响总体统计分析结果 grep (GNUgrep) 2.5.1脚本解释 grep ‘webapp’ $1 //接受参数 在命令行下 执行 ./jiaobenName.sh query.log | awk ‘{print $9}’ // 提取patch 之后的内容 | awk -F “&” ‘{print $1}’ // 提取patch中查询串,去掉其他条件信息 | echo -e “$(sed ‘s/+/ /g; s/%/\x/g’)” // decode log | sed ‘s/[!-~a-zA-Z0-9=:|-]/ /g’ //英文部分用空格替换 | sed ‘s/ /n/g’ | grep -v ‘^$’ //空格用n 替换,并去掉重复n | awk ‘{count[$0]++} END {for(k in count) print count[k],k}’ //统计单词词频 | sort -k1 -nr //按照词频降序 > “/home/yingyuan.lyq/tw$1” //最终结果保存路径
#! /bin/shif [ -z “$1” ]then echo “need file” exit 1fi grep ‘webapp’ $1 | awk ‘{print $9}’ | awk -F “&” ‘{print $1}’ | echo -e “$(sed ‘s/+/ /g; s/%/\x/g’)” | sed ‘s/[!-~a-zA-Z0-9=:|-]/ /g’ | sed ‘s/ /n/g’ | grep -v ‘^$’ | awk ‘{count[$0]++} END {for(k in count) print count[k],k}’ | sort -k1 -nr > “/home/yingyuan.lyq/tw_$1”
本文来源于"阿里中间件团队播客",原文发表时间"
2012-05-01 "