У меня есть две большие таблицы SQL schDetail, schTeacher
. schDetail (родительский) содержит около 15 миллионов строк и около 430 столбцов, а schTeacher (дочерний) содержит 20 столбцов и 100 миллионов записей. У schTeacher есть несколько рядов для одной школы, в основном отношения один-ко-многим между schDetail и schTeacher. В одной школе много учителей.
Я хочу иметь вложенный документ внутри schDetail. Что-то вроде
schCode: 123,
schName: "myschool",
teacher: [{
id: 22,
name: "myTeacher"
},
{
id: 345,
name: "myteacher2"
}]
У меня уже есть индекс schDetail
в ES с 15 миллионами документов. Я хочу вставить данные schTeacher
в тот же индекс. Я изучаю способы сделать это, используя logstash, псевдонимы, reindex api, но не могу найти путь вперед.
Кроме того, я могу предварительно объединить таблицы в postgres, а затем отправить их в ES, но когда я оставил соединение schDetail
и schTeacher
он создаст 100 миллионов записей с повторением schCode
, и тогда уникальный счет в ES не будет точным.
Я хочу иметь вложенное поле в schDetail, как teacher
и встраивать всех учителей в определенную школу. Я также посмотрел на mapping
API и nested type
в ES, но не знаю, как его использовать.
Мой текущий файл конфигурации logstash:
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://localhost:5432/school"
jdbc_user => "postgres"
jdbc_password => "postgres"
jdbc_driver_library => "/Users/karangupta/Downloads/postgresql-42.2.8.jar"
jdbc_driver_class => "org.postgresql.Driver"
jdbc_paging_enabled => true
statement_filepath => "/usr/local/Cellar/logstash/7.3.2/conf/hrd.sql"
}
}
filter{
mutate {
convert => {
"distance_sec" => "float"
}
}
}
# output {
# stdout { codec => json_lines }
# }
output {
elasticsearch {
index => "alltogether"
hosts => "http://localhost:9200"
}
}
statement_filepath
в приведенном выше файле cong указан путь к sql, который извлекает данные schTeacher
, но вместо создания нового индекса (всего) я хочу встроить его в schDetail
с вложенным столбцом.
Надеюсь, яЯ могу четко объяснить проблему. Я очень новичок в ES и не могу найти существенную поддержку для него. Документация не совсем понятна.