Плагин ввода logstash jdbc выдает ошибку отображения даты при индексации данных в эластичный поиск из postgres
Справочная информация: я пытаюсь проиндексировать данные из Postgres в эластичный поиск и следующие шаги:
Шаг 1:- Массовый импорт данных из Postgres с помощью плагина logstash jdbc-input. Шаг 2:- Синхронизируйте дальнейшие изменения метаданных из приложения с помощью эластичного поиска REST Apis (для CRUD).
В начале я создал отображение документа в упругом поиске, как показано ниже: -
{"metatestsample": {
"properties": {
"business_number": {
"type": "long"
},
"business_number_type": {
"type": "string",
"index":"not_analyzed"
},
"document_id": {
"type": "long"
},
"document_location": {
"type": "string",
"index":"not_analyzed"
},
"document_number": {
"type": "string",
"index":"not_analyzed"
},
"document_status": {
"type": "string",
"index": "not_analyzed"
},
"country": {
"type": "string",
"index": "not_analyzed"
},
"document_created": {
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ss"
},
"customer": {
"properties": {
"customer_id": {
"type": "long"
},
"customer_number": {
"type": "string",
"index": "not_analyzed"
},
"customer_name": {
"type": "string",
"index": "not_analyzed"
},
"address1":{
"type": "string",
"index": "not_analyzed"
},
"address2":{
"type": "string",
"index": "not_analyzed"
},
"city":{
"type": "string",
"index": "not_analyzed"
},
"state":{
"type": "string",
"index": "not_analyzed"
},
"zip":{
"type": "string",
"index": "not_analyzed"
},
"country":{
"type": "string",
"index": "not_analyzed"
},
"phone":{
"type": "string",
"index": "not_analyzed"
},
"fax":{
"type": "string",
"index": "not_analyzed"
},
"email":{
"type": "string",
"index": "not_analyzed"
},
"contact_name":{
"type": "string",
"index": "not_analyzed"
},
"customer_created":{
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ss"
},
"customer_modified":{
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ss"
},
"type":{
"type": "string",
"index": "not_analyzed"
}
}
},
"expiration_date": {
"type": "date",
"format": "YYYY-MM-DD"
},
"legacy_document_id": {
"type": "string"
},
"document_modified": {
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ss"
},
"review_date": {
"type": "date",
"format": "YYYY-MM-DD"
},
"valid": {
"type": "boolean"
},
"invalid_reason": {
"type": "string",
"index": "not_analyzed"
}
}
} }
И добавил конфигурацию logstash для входного плагина jdbc: -
input{
jdbc {
# Postgres jdbc connection string to our database, mydb
jdbc_connection_string => "jdbc:postgresql://localhost:5432/mydb"
# 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 => "/data/logstash/postgresql-9.4-1204.jdbc4.jar"
# The name of the driver class for Postgresql
jdbc_driver_class => "org.postgresql.Driver"
jdbc_validate_connection => true
# our query
**statement_filepath => "testindex.sql"**
}
}
output{
elasticsearch{
action =>"update"
index => "indexname"
manage_template => false
document_id => "%{uid}"
doc_as_upsert => true
hosts => ["192.168.56.105"]
}
}
Примечание: Statement_filepath => "testindex.sql" testindex.sql имеет оператор выбора, который запрашивает данные из postgres
Проблема: Когда я пытаюсь вставить данные непосредственно в эластичный поиск с помощью API REST, это работает, и документ вставляется без каких-либо ошибок.
** Но когда я пытаюсь вставить документы, используя плагин logstash jdbc, он выдает ошибку ниже. Я пропускаю какой-либо флаг или параметр конфигурации? **
status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"Mapper for [expiration_date] conflicts with existing mapping in other types:\n[mapper [expiration_date] is used by multiple types. Set update_all_types to true to update [format] across all types.]"}}}, :level=>:warn}