同步操作将从 davidyem/springboot数据同步Mysql-ElasticSearch 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
搜索高德地图地点信息,记录入数据库,并将信息同步至ES用于模糊查询
项目中所用到技术下文都有详细讲解,还提供了软件的安装地址及配置教程,非常适合像我一样的新手
非常简单的软件架构如下图:
首先在spring boot项目中,通过定时任务(或者controller接口),使用HTTP抓取高德地图poi(point of interest,你感兴趣的)数据,并将抓取到的数据存入MySQL数据库。
数据存入MySQL后,使用canal监听MySQL的binlog,然后再在spring boot项目中额外启动一个canal客户端线程,用于拉去canal中的数据。
可能有同学会疑问,为什么你都有数据了,直接再写入elasticsearch中不就好吗? 其实这也是一种方法,名为双写。但在生产环境中,可能会有很多个地方触发入库的操作, 若是一不小心有一个地方只写入mysql库,忘记写入es,会造成数据不一致。此外,这个canal客户端还可以部署在其他的实例上,或者直接发送到kafka,供其他系统同步。
项目除了使用到了Java和Spring Boot框架外,还有需要安装canal、MySQL和ElasticSearch, 此外若要抓取的数据还需要前往高德地图https://lbs.amap.com/申请key
下面是这些软件的版本和安装地址,其中mysql和java若已经安装了,直接用已安装的版本问题应该不大
软件 | 版本 | 下载连接 |
---|---|---|
Java | jdk1.8 | https://www.oracle.com/java/technologies/downloads/#java8-windows |
MySQL | 8.0.28 | https://dev.mysql.com/downloads/mysql/ |
Canal | 1.1.4 | https://xiaopeng.feishu.cn/docx/doxcnMt2pQ1q7dqeJLJNuk4H9Ob |
ElasticSearch | 7.8.0 | https://www.elastic.co/cn/downloads/past-releases/#elasticsearch |
安装后,canal需要配置监听的数据库信息,mysql需要开启binlog,详细步骤可看https://xiaopeng.feishu.cn/docx/doxcnMt2pQ1q7dqeJLJNuk4H9Ob#doxcnMAIoAog2q84QMlaK2LV13g
master分支因为要通过excel导入地区表,poi字典表等进入数据库,所以看看起来多了一点easyExcel的操作,
不了解且对easyExcel不是很感兴趣的的同学和切换到simple分支,快速了项目结构
项目的代码结构和大概作用如下:
项目启动前先看以下是软件有无启动或配置成功
利用postMan请求发送请求,若成功返回,过几秒后控制台有canal客户端日志输出,查看ElasticSearch成功接收到数据,则项目启动成功。
postman请求URL: http://localhost:8080/test/getPoi2
请求参数:
{
"types" : "110103",
"region" : 110000,
"page_num" : 1,
"page_size" : 20
}
预计返回内容
{
"status": 1,
"count": 20,
"info": "OK",
"infocode": "10000",
"pois": [
{
"id": "B000A9PI2V",
"name": "地坛公园-牡丹园",
"type": "风景名胜;公园广场;植物园",
"typecode": "110103",
"address": "安定门外大街2号地坛公园内(东北角)",
"location": "116.416823,39.954899",
"adcode": "110101",
"timestamp": null,
"photos": [
{
"title": "",
"url": "http://store.is.autonavi.com/showpic/53bb4fb0a310502a4d11000f"
},
{
"title": "",
"url": "http://store.is.autonavi.com/showpic/53bb4fb0a310502a4d11007b"
}
],
"business": {
"tag": null,
"tel": "010-64214657",
"rating": "4.3",
"cost": null
}
},
{
"id": "B000A8506P",
"name": "妙峰樱桃沉浸营地",
"......" : "......"
}
]
}
其实.. 这个我也暂时... 还有有点作用的...... 比如至少学会了一种数据同步方式
(女士优先)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。