Массовое создание и массовое обновление индексного документа ElasticSearch с использованием Logstash - PullRequest
0 голосов
/ 01 ноября 2019

Документы не обновляются, а создаются заново вместо обновления документа.

COMPANY_ID - это уникальный столбец.

SAMPLE DATA

COMPANY_NAME, LOGO_EXT,COMPANY_ID

ABC LIMITED, JPG, ABC000001

XYZ LIMITED, PNG, ABC000002

AAA LLC ,, ABC000003

Я могу создать индекс идокументы.

Проблема заключается в том, что при обновлении индекса создается документ, а не обновляется. Например, ДО ABC LIMITED, JPG, ABC000001

ПОСЛЕ ABCD LIMITED, JPG, ABC000001

Поэтому необходимо обновлять только COMPANY_NAME.

1. Успешно удалось создать индекс, используя следующий код: -

BAT FILE

cd C: \ logstash-7.3.1 \ bin logstash -f C: \ logstash.conf

C: \ logstash.conf ФАЙЛ

input {  
    jdbc {  
        jdbc_driver_library => "C:\sqljdbc_7.4\enu\mssql-jdbc-7.4.1.jre8.jar"  
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"  
        jdbc_connection_string => "jdbc:sqlserver://;user=;password=;"  
        jdbc_user => ""  
        jdbc_password => ""  
        statement => "SELECT COMPANY_NAME,LOGO_EXT,COMPANY_ID from dbo.CompanyMaster WITH(NOLOCK) ORDER BY COMPANY_NAME"  
    }  
}  
filter {}  
output {  
    stdout {  
        codec => json_lines  
    }  
    elasticsearch {  
        hosts => "http://localhost:9200"  
        index => "companylistindex"  
        document_id => "%{COMPANY_ID}"
        action => index
    }  
}  

2. Код обновления

input {  
    jdbc {  
        jdbc_driver_library => "C:\sqljdbc_7.4\enu\mssql-jdbc-7.4.1.jre8.jar"  
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"  
        jdbc_connection_string => "jdbc:sqlserver://;user=;password=;"  
        jdbc_user => ""  
        jdbc_password => ""  
        statement => "SELECT COMPANY_NAME,LOGO_EXT,COMPANY_ID from dbo.CompanyMaster WITH(NOLOCK) WHERE ModifiedOn>'2019-11-01'"  
    }  
}  
filter {}  
output {  
    stdout {  
        codec => json_lines  
    }  
    elasticsearch {  
        hosts => "http://localhost:9200"  
        index => "companylistindex"  
        document_id => "%{COMPANY_ID}"
    }  
}

Пожалуйста, помогите мне обновить документ.

Примечание. Обновлять нужно только COMPANY_NAME или LOGO_EXT, если они отличаются. COMPANY_ID - уникальный столбец.

1 Ответ

0 голосов
/ 02 ноября 2019

В дополнение к комментарию, предложенному @Polynomial Proton, вам больше не нужны 2 выходные разделы. Просто раздел 1, как показано ниже:

output {  
    stdout {  
        codec => json_lines  
    }  
    elasticsearch {  
        hosts => "http://localhost:9200"  
        index => "companylistindex"  
        document_id => "%{COMPANY_ID}"
        action => "update"
        doc_as_upsert => "true"
    }  
}

Это обеспечит как индексацию, так и обновление.

...