Logstash7.0.0同步MySQL数据到ES,并存储geo位置信息,以及支持写入分词功能

场景:

1. 数据来源是python爬虫获取美团、安居客的数据,使用Java进行ETL清洗后,批量插入MySQL中,由于MySQL在千万级甚至亿级数据量的激增下,查询缓慢,以及部分功能不能支持业务的需求,比如分词。。。等

2. 调研组件Hive,发现Hive对于GIS的支持并不友好,首先Hive不支持创建表时指定字段为geometry类型,这就很尴尬了,对于使用GIS函数的功能,官方并不支持,但是我们可以通过来扩展UDF的方式进行使用,使用请参照:https://blog.csdn.net/qq_32252917/article/details/105378848

3. 调研ElasticSearch,选定版本7.0.0

搭建环境:安装Logstash,ElasticSearch,Kibana

参考:

安装logstash和logstash-input-jdbc

ElasticSearch7.0.0安装IK分词器

经过调研:ElasticSearch支持geo位置信息的查询,支持分词的查询,对于SQL的解决方案也是有的,并且支持Springboot与ElasticSearch的集成就很nice

清洗后的数据样例:

1	1070934115905789	张亮麻辣烫	30.147708	120.078346	POINT (120.078346 30.147708)	杭州市转塘街道金街美地商业中心3-133	4816	4.4000001		8	20	20	快餐小吃	转塘	10:00-23:59	330100	杭州市	2020-03-27 15:16:37.0	
2	1088436107667681	石小吞	30.139899	120.072293	POINT (120.072293 30.139899)	转塘街道之江泰景大厦2号楼113室-2	4802	4.5		25	20	24	中式简餐	首尔印象	10:00-21:00	330100	杭州市	2020-03-27 15:16:37.0	
3	969590067570034	蜀汇香麻辣香锅	30.141992	120.071456	POINT (120.071456 30.141992)	杭州市转塘街道霞鸣街159号、161号(之江商务中心1号楼商117、118)	4141	3.9000001		5	32	21	麻辣香锅	首尔印象	09:40-22:30	330100	杭州市	2020-03-27 15:16:37.0	
4	879266905368275	JIMU佶慕创意生日蛋糕	30.276493	120.095462	POINT (120.095462 30.276493)	五联西苑51号103室	3986	4.5999999		0	0	115	生日蛋糕		06:00-21:00	330100	杭州市	2020-03-27 15:16:37.0	
5	1007591938247898	暖爱蛙虾跳	30.150440	120.078756	POINT (120.078756 30.15044)	转塘镇美院南街象山国际西面2号楼	3983	4.4000001		8	20	19	中式简餐	转塘	10:00-23:00	330100	杭州市	2020-03-27 15:16:37.0	
6	953075918354303	杭粥西糊	30.150265	120.078895	POINT (120.078895 30.150265)	浙江省杭州市西湖区转塘街道美院南街89号2号楼2楼216室	3071	4.69999981		8	0	15	快餐小吃	转塘	07:00-21:00	330100	杭州市	2020-03-27 15:16:37.0	
7	1026945060845891	七号の茶	30.147755	120.079269	POINT (120.079269 30.147755)	转塘街道金街美地商业中心2号楼118商铺	3050	4.5999999		55	20	12	奶茶果汁	转塘	09:45-20:45	330100	杭州市	2020-03-27 15:16:37.0	
8	891503267213030	二条轻食	30.143201	120.069550	POINT (120.06955 30.143201)	转塘街道万美商务中心5号楼313号	2715	4.69999981		75	18	23	沙拉		10:00-20:00	330100	杭州市	2020-03-27 15:16:37.0	
9	885451658268086	韩味购炸鸡啤酒屋	30.147508	120.078562	POINT (120.078562 30.147508)	转塘金街美的商业中心3号楼206室(一点点楼上)	2375	4.5999999	品牌	55	20	30	炸鸡炸串	转塘	00:00-02:00,09:40-21:00	330100	杭州市	2020-03-27 15:16:37.0	
10	1010946307684654	锅sir时尚火锅外卖	30.299309	120.113058	POINT (120.113058 30.299309)	拱墅区塘萍路157号	2137	4.30000019	品牌	68	30	83	小火锅	城西银泰	00:00-03:00,09:30-23:59	330100	杭州市	2020-03-27 15:16:37.0	

同步MySQL数据到ElasticSearch

1.首先安装ElasticSearch和Logstash以及Kibana(ElasticSearch安装使用head插件)

2.ElasticSearch创建索引:

curl -XPUT "http://127.0.0.1:9200/mt"

或者直接使用head插件创建也可以。

导入地理坐标数据需要指定字段gis数据格式为geo_point,指定的方法有多种,这里说两种:

1)利用template模板指定gis字段为地理坐标类型(geo_point)

2)直接在kibana控制台指定gis坐标为地理坐标类型(geo_point)

我这里使用第二种方法:(使用postman工具)

post http://ip:9200/mt/_mapping 

{
   "properties": {
            "gis": {
                "type": "geo_point"
            }
        }
}

只需指定这一个特殊字段即可,其余字段会在导入的时候自动和相应的字段类型进行匹配

3.Logstash安装插件:

logstash-input-jdbc

logstash-output-elasticsearch

切换到logstash-7.0.0的home目录:

mkdir templete
cd templete
vi logstash.json

#logstash模版,导入ElasticSearch的时候对string类型的字段进行分词,使用的IK分词插件
{
    "index_patterns": ["*"],
  "order" : 0,
  "version": 1,
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas":0
  },
    "mappings": {
      "date_detection": true,
      "numeric_detection": true,
            "dynamic_templates": [
                {
                    "string_fields": {
                        "match": "*",
                        "match_mapping_type": "string",
                        "mapping": {
                            "type": "text",
                            "norms": false,
                            "analyzer": "ik_max_word",
                            "fields": {
                                "keyword": {
  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值