Импорт данных из MySQL с колонкой JSON для упругого поиска - PullRequest
0 голосов
/ 12 июня 2018

У меня есть столбец в MySQL с json в одном из столбцов, я должен реализовать поиск по этому столбцу с несколькими ключами.Я попытался использовать log stash для создания индекса с помощью Mysql.

Вот моя конфигурация log stash.Информация - это столбец с типом text и парами json в виде текста

input {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://localhost:3306/dbname"
    # The user we wish to execute our statement as
    jdbc_user => "user"
    jdbc_password => "password"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    # our query
    statement => "SELECT info FROM organization"
    }
  }
output {
  stdout { codec => json_lines }
  elasticsearch {
  "hosts" => "localhost:9200"
  "index" => "new_index"
  "document_type" => "doc"
  }
}

Я попытался создать отображение индекса и установить одно из полей как вложенное в отображение, но ничего не было загружено в мойиндекс.Необработанное обновление MySQL для индексации обрабатывает мой json как текст, что усложняет поиск.У любого есть лучшее решение для обновления столбца json в индекс, чтобы я мог искать по ключу.

Вывод.

{
  "check_index" : {
    "aliases" : { },
    "mappings" : {
      "doc" : {
        "properties" : {
          "@timestamp" : {
            "type" : "date"
          },
          "@version" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "info" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1528870439037",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "MkNrBMD8S8GYfDtxRyOFfg",
        "version" : {
          "created" : "6020499"
        },
        "provided_name" : "check_index"
      }
    }
  }
}

есть информация моя строка JSON.В котором у меня есть много ключевых значений, например, для: адреса, имен и т. Д. В json, поэтому вместо отдельного столбца такого поля я создал для него json и добавил его в столбец.Но я не могу искать на этом JSON.

1 Ответ

0 голосов
/ 14 июня 2018

Я думаю, что вы ищете JSON filter.Просто добавьте имя вашего столбца типа JSON внутри этого фильтра JSON.Скажем, если столбец с типом данных JSON равен info, ваш фильтр будет выглядеть примерно так:

filter {
  json {
    source => "info"
    }
}

Если у вас есть несколько столбцов с типом данных JSON, вы можете повторить свой jsonдиктовать в пределах filter.Таким образом, для столбца JSON info ваша окончательная конфигурация logstash будет выглядеть примерно так:

input {
  jdbc {
      jdbc_connection_string => "jdbc:mysql://localhost:3306/dbname"
      # The user we wish to execute our statement as
      jdbc_user => "user"
      jdbc_password => "password"
      # The path to our downloaded jdbc driver
      jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.38.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      # our query
      statement => "SELECT info FROM organization"
  }
} 
filter {
  json {
    source => "info"
    }
}
output {
  elasticsearch {
  "hosts" => "localhost:9200"
  "index" => "new_index"
  "document_type" => "doc"
  }
}
...