通过具有多对多关联的logstash将mysql数据迁移到elasticsearch

9cbw7uwe  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(422)

尝试使用logstash创建从mysql数据库到elasticsearch索引的数据迁移。
我有这样的数据库模式:
item 这是主桌。我打算搜查 item s。每个 itemcity . 它有很多 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 ='伦敦',和 colour ='蓝色'和 colour ='红色'和 colour ='黄色',与 specification ='材料'和 value ='陶瓷',应该通过“london and blue and ceramic”和“london and red and ceramic”搜索查询找到。

8ehkhllq

8ehkhllq1#

你可以用 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

相关问题