我有一个用户字段,它依赖于许多其他字段,它有多个外键到其他表,并有多对多关系使用透视表和一对多关系。
API类似于嵌套的JSON结构。对于特定用户,关系数据如下所示。
user = {
id : _212dasd,
name: "alphabeta",
key1_id = 23,
key1 : {
id: 23,
name: "new name"
},
key2 : [
{
id: _asdak61526,
key2_id : 2
user_id : _212dasd,
},
{
id: _asdak6152a,
key2_id : 3
user_id : _212dasd
}
],
key3: {
name : "gama",
key_3_nested : {
name : "abc",
key_3_nested_levle2 : {
name : "xyz",
}
}
}
}如何将mysql关系数据同步到elastic search,因为大多数读取都会使用elastic search,我正在使用log-stash进行同步。
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name"
# The user we wish to execute our statement as
jdbc_user => "root"
jdbc_password => "root"
# The path to our downloaded jdbc driver
jdbc_driver_library => "/~/mysql-connector-java-5.1.17.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
# our query
statement => "SELECT * FROM users INNER JOIN table2 ON table2.user_id = users.id" // just a demo query
schedule => "* * * * * *"
}
}
output {
elasticsearch {
document_id=> "%{sk_id}.%{user_id}"
document_type => "doc"
index => "db_prd"
hosts => ["http://localhost:9200"]
}
stdout{
codec => json_lines
}
}问:我如何维护这种关系,创建多连接查询是一个好主意,因为每次它都会对许多用户数据及其未优化的结构进行多个大连接。对于10000个用户,连接到多个表将会减慢同步速度。它会同步每个索引还是只更改一个索引?
如何从elastic search获取API上的嵌套结构?
发布于 2021-03-05 17:00:18
您可以在过滤器中使用jdbcstream添加嵌套对象,如下所示:
jdbc_streaming {
jdbc_driver_library => "/~/mysql-connector-java-5.1.17.jar"
jdbc_driver_class => "org.mariadb.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name"
jdbc_user => "root"
jdbc_password => "12345678@Abc"
statement => "SELECT * FROM table2 ON table2.user_id = cus_id"
parameters => {"cus_id" => "id"}
target => "table2"
}它将创建嵌套的"table2“,其中data is row responsed from statement => "SELECT * FROM table2 ON table2.user_id = cus_id" with "id" in statement => "SELECT * FROM users;" ( fix of this statement => "SELECT * FROM users INNER JOIN table2 ON table2.user_id = users.id")
注意:它会减慢你的进程。
https://stackoverflow.com/questions/61431030
复制相似问题