mysql - 将数据从 mysql 迁移到具有多对多关系的 elasticsearch
问题描述
我想将数据从 传输mysql
到elasticsearch
。为此,我使用logstash
并pipline
input {
jdbc {
. . .
statement => "SELECT DISTINCT
d.id AS doctorId,
UNIX_TIMESTAMP( d.updated_at ) AS unix_ts_in_secs,
d.firstName,
d.lastName,
m.id AS metaId m.`name` AS metaName
FROM
doctors AS d
JOIN doctormetas AS dm ON d.id = dm.doctor
JOIN metas AS m ON dm.meta = m.id
WHERE
UNIX_TIMESTAMP( d.updated_at )> : sql_last_value
AND UNIX_TIMESTAMP( d.updated_at )< NOW()
ORDER BY
d.updated_at ASC"
}
}
filter {
mutate {
copy => { "id" => "[@metadata][_id]"}
remove_field => ["@version", "unix_ts_in_secs"]
}
}
output {
elasticsearch {
. . .
}
}
医生有很多医生元,医生元有一个元
在这种方法中,数据重复多次,占用大量空间
{
"_index" : "doctor",
"_type" : "_doc",
"_id" : "411258222",
"_score" : 1.0,
"_source" : {
"meta" : 222,
"doctorId": 411258,
"firstname" : "محسن",
"lastname" : "بهمنی کشکولی",
}
},
{
"_index" : "doctor",
"_type" : "_doc",
"_id" : "411258438",
"_score" : 1.0,
"_source" : {
"meta" : 438,
"doctorId": 411258,
"firstname" : "محسن",
"lastname" : "بهمنی کشکولی",
}
},
{
"_index" : "doctor",
"_type" : "_doc",
"_id" : "411258456",
"_score" : 1.0,
"_source" : {
"meta" : 456,
"doctorId": 411258,
"firstname" : "محسن",
"lastname" : "بهمنی کشکولی",
}
},
输出结果如何过滤如下?
{
"_index" : "doctor",
"_type" : "_doc",
"_id" : "411258",
"_score" : 1.0,
"_source" : {
"meta" : [438,222,456],
"doctorId": 411258,
"firstname" : "محسن",
"lastname" : "بهمنی کشکولی",
}
},
解决方案
推荐阅读
- datasource - 如何在 Drools Business Central 中添加驱动程序以添加数据源
- javascript - Safari 包含高度输入的边框?
- react-native - 在 React-Native-Gifted-Chat 中删除键盘和作曲家之间的空间
- c# - 我可以从 WPF 应用程序调用 Win API 函数吗
- javascript - 想要将内容垂直居中
- python - 一次将多列转换为日期时间,保持时间
- html - 如何在css中排除一个类中两个元素之间的特殊字符?
- node.js - 如何在 Auth0 中为新用户发送密码更改电子邮件而不是验证电子邮件
- java - 无法解析构造函数'SlideModel(java.lang.String, java.lang.String)'?
- android - 是否可以同时在安卓手机中进行蓝牙 SPP 连接和 BLE GATT 连接?