您好,欢迎来到投聚财经。
搜索
您的当前位置:首页标签云在MongoDB和go中的实现

标签云在MongoDB和go中的实现

来源:投聚财经


所以每个blog的标签应该是作为一个数组内嵌在blog记录中。那么就需要遍历所有的blog记录才能统计处所有tag的使用情况。 两种处理方式:

  1. 用一个额外的集合来保存tag的统计信息,所有涉及tag的操作都去更新这个集合。
  2. Schedule一个后台运行的job,定时运行mongodb的MapReduce操作来计算tag的使用数据。

第二种方式:

job := mgo.MapReduce {
 Map: "function(){if(!this.tags) return; for(i in this.tags){emit(this.tags[i],1);}}",
 Reduce: "function(key, values) {var sum = 0; for(i in values){sum = sum + values[i];} return sum;}",
 Out: bson.M{"replace":"tags"},
 }
 
 func CollectTags() {
 c := session.DB(DB).C("blog")
 _,err:= c.Find(nil).MapReduce(job, nil)
 if err!= nil {
 //TODO: better logger
 fmt.Println(err)
 }
 
 time.AfterFunc(MapReduceInterval, CollectTags)
 }
 
 func main() {
 go CollectTags()
 //Other...
 }
 

有了数据,tag云的生成就比较简单了,这里用的是wikipedia上介绍的计算公式:

template:

{{if .}}
 
 {{range $tag, $size := .}}
 {{$tag}}
 {{end}}
 
 {{end}}
 

最大字体选择28,最终效果即如主页所示。

Copyright © 2019- tjwe.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务