当成一个小项目处理,自定义下需求。
想象一下,导入Elastic日报能在Kibana做哪些分析呢? 1)title 词频统计 2)编辑发布文章统计 3)2017,2018,2019日报量统计 4)日报按月统计 5)编辑发日报时间按区间统计 6)关键词检索,如:性能、设计、优化、实战等 7)....
的确,有了数据,能实现N多分析!
编码之前,设计先行。一图胜千言,核心架构设计图如下所示:
架构层面要考虑的核心工作:
Java + Jsoup + 正则 分页解析、并构造出字段信息。
记录了第几期日报字段,且给每一篇文章构造定义了唯一id。
写入Mysql。
借助logstashinputjdbc实现Mysql到ES的同步。
filter { date { match => ["publish_time", "yyyy-MM-dd HH:mm:ss"] target => "publish_time" timezone => "Asia/Shanghai" } ruby { code => "event.set('timestamp', event.get('publish_time').time.localtime + 8*60*60)" } ruby { code => "event.set('publish_time',event.get('timestamp'))" } mutate { remove_field => ["timestamp"] }}
最核心就是Mapping的定义。如前分析,要自定义Mapping各字段,不要使用默认动态的Mapping。
"fielddata":"true",
日报在:搜索、分析、实践、性能、监控方面都有大量的中英文优秀精选文章。
其他3张图,对应需求2)编辑发布文章统计、3)2017,2018,2019日报量统计、4)日报按月统计趋势图。
实践一把:
POST es_daily_info/_search{ "size": 0, "aggs" : { "time_range" : { "range" : { "script" : { "source": "doc['publish_time'].date.getHourOfDay()", "lang": "painless" }, "ranges" : [ { "from":0, "to" : 6 }, { "from" : 6, "to" : 20 }, { "from" : 20, "to": 24} ] } } }}
返回结果如下:
[ { "key" : "0.0-6.0", "from" : 0.0, "to" : 6.0, "doc_count" : 21 }, { "key" : "6.0-20.0", "from" : 6.0, "to" : 20.0, "doc_count" : 1524 }, { "key" : "20.0-24.0", "from" : 20.0, "to" : 24.0, "doc_count" : 108 } ]
可以看出: 有21篇文章是凌晨以后发的,有108篇是晚上8点到晚24点发布的。(辛苦各位日报编辑了!)
优中选优
。POST es_daily_info/_search{ "_source": { "includes": ["title","url"] }, "query": { "match_phrase": { "title": "性能优化" } }}
其实,Elastic中文社区完全可以上线日报搜索功能,方便大家O(1)复杂度获取想要的日报文章。
本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!