首页 > 解决方案 > 使用 Logstash 将两个 mysql 表中的数据与单个 Elasticsearch 索引同步

问题描述

我有两个要保存到单个弹性索引中的 mysql 表。

表 1:Productidname...等

表 2:ProductWarehouseproductId, warehouseId, qtyAvailable... 等

Product 一对多 ProductWarehouse

我的问题是,如何将ProductWarehouse每个记录保存为product数组?

如果ProductWarehouse修改了,如何在 Elastic index 上体现?

最佳做法是什么?

Elastic 中的产品索引应如下所示:

{
 "id",
 "name": ...,
 "warehouses": [
   {"warehouseId": 1, "qtyAvailable": 3},
   {"warehouseId": 10, "qtyAvailable": 30}
 ]
}

标签: mysqlelasticsearchlogstash

解决方案


我的建议是为您需要的结构创建一个 MySQL 视图:Product joins with ProductWarehouse。此视图仅用于同步,然后使用 Logstash 将此视图同步到 ElasticSearch。

然后你可以使用 ElasticSearsh 索引作为这个结构:

{
 "id",
 "name": ...,
 "warehouses": 1
}
{
 "id",
 "name": ...,
 "warehouses": 3
}

推荐阅读