本来计划是用logstash来自动同步mysql数据的,奈何配置一直出问题。就只能自己写代码来实现了。
业务需求:
公司业务发展,需要在现有的项目基础上做ES搜索。那就需要同步现有的数据到ES中(现有的数据存储在mysql上)。
技术分析:
这里以同步“文章”表的数据举例。
1 定时任务:项目放在云服务器上,contos7.3的系统。可以使用cronteb定时任务来检测是否有新增数据,进行自动更新操作。
2 ES操作:
2.1 新建索引(index)和 映射,映射的结构就是自己想存储的数据结构。
2.2 用聚合查询找到当前存储在ES上的最后一篇文章id,再从数据库查出最后一篇文章id,判断两个ID是否一样,数据库的ID大就证明有新数据了。
2.3 有新数据,就用两个id作为条件,搜索出新增的文章,批量存储到ES中。
上代码片段
1 单例模式创建ES对象
<?php
namespace app\index\controller;
use Elasticsearch\ClientBuilder;
use think\Db;
class QuanTest
{
private $client;
public function __construct() {
if (!empty($this->client)) {
return $this->client;