Как импортировать данные из postgres вasticsearch и создавать вложенные объекты? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть две большие таблицы 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 и не могу найти существенную поддержку для него. Документация не совсем понятна.

...