更新文档问题

时间:2016-10-18 13:45:44

标签: elasticsearch logstash

我有一个日志存储正在运行从postgresql中提取记录并在弹性搜索中创建文档,但每当我尝试更新postgres中的记录时,弹性搜索中都没有反映出来,这是我的INPUT& OUTPUT配置让我知道我在这里遗漏了什么,

  input {
    jdbc {
    # Postgres jdbc connection string to our database, mydb
    jdbc_connection_string => "jdbc:postgresql://127.0.0.1:5009/data"
    # The user we wish to execute our statement as
    jdbc_user => "data"
    jdbc_password=>"data"
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/postgresql-9.4.1209.jar"
    # The name of the driver class for Postgresql
    jdbc_driver_class => "org.postgresql.Driver"
    #sql_log_level => "debug"
    jdbc_paging_enabled => "true"
    jdbc_page_size => "5000"
    schedule => "* * * * *"
    # our query
    clean_run => true
    last_run_metadata_path => "/logstash/.test_metadata"
    #use_column_value => true
    #tracking_column => id
    statement => "SELECT id,name,update_date from data where update_date > :sql_last_value"
    }
    }

    output {
    elasticsearch{
    hosts => ["127.0.0.1"]
    index => "test_data"
    action => "index"
    document_type => "data"
    document_id => "%{id}"
    upsert => ' {
    "name" : "%{data.name}",
    "update_date" : "%{data.update_date}"
    } '
    }
    }

1 个答案:

答案 0 :(得分:0)

我认为您需要跟踪日期/时间戳列而不是id列。如果您的每个更新都有UPDATE_DATE列,那就更好了。

您的SELECT语句只会获取新记录(即id > last_id),如果您更新记录,其ID将不会更改,因此jdbc将无法获取更新的记录下次运行时输入。