尝试使用Logstash创建从MySQL数据库到Elasticsearch索引的数据迁移。
我有这种数据库模式:
item
这是主表。我打算搜索item
个。
每个item
都有city
。
它有许多colours
。
它有许多specifications
,每个都有在连接表中设置的value
。
目前,我仅通过city
将item
合并到LEFT JOIN
表中而成功进行了迁移。
我的迁移语句如下:
statement => "SELECT `item`.`id`, `item`.`title`, `item`.`description`, `city`.`name` AS `city` FROM `item` LEFT JOIN `city` ON `city`.`id` = `item`.`city`"
我的整个logstach.conf
:
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
jdbc_user => "root"
jdbc_password => ""
jdbc_driver_library => "/some/local/path/mysql-connector-java-8.0.11.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
statement => "SELECT `item`.`id`, `item`.`title`, `item`.`description`, `city`.`name` AS `city` FROM `item` LEFT JOIN `city` ON `city`.`id` = `item`.`city`"
}
}
output {
stdout { codec => json_lines }
elasticsearch {
"hosts" => "localhost:9200"
"index" => "test-migrate"
"document_type" => "data"
"document_id" => "%{id}"
}
}
想知道如何迁移colour
和specification
及其value
来通过这些属性搜索我的item
吗?
例如,如果有一个item
,它与city
='London',与colour
='blue'和colour
='red ',并且colour
='黄色',并且与specification
='材料'和value
='陶瓷'相关联,则应使用“伦敦与蓝色和陶瓷”和“伦敦和红色和陶瓷”搜索查询。
答案 0 :(得分:1)
您可以使用LEFT JOIN
联接其余表并获取它们的值,如下所示-
SELECT item.id,
item.title,
item.description,
city.name AS city,
spec.name as specificationName,
ispec.value as specificationValue,
color.name as color
FROM item
LEFT JOIN city ON city.id = item.city
LEFT JOIN Item_has_Color ic on ic.item = item.id
LEFT JOIN Item_has_Specification as ispec on ispec.item = item.id
LEFt JOIN color on color.id = ic.color
LEFT JOIN specification as spec on spec.id = ispec.specification