elasticsearch 批量创建&;使用Logstash批量更新ElasticSearch索引文档
文档未得到更新,而是得到新创建的文档,而不是更新文档 公司ID是唯一的列 样本数据 公司名称、徽标外部、公司ID ABC有限公司,JPG,ABC000001 XYZ有限公司,巴布亚新几内亚,ABC000002 AAA有限责任公司,ABC000003 我能够创建索引和文档 问题是当我更新索引时,文档将被创建而不是更新。 例如。 之前 ABC有限公司,JPG,ABC000001 之后 ABCD有限公司,JPG,ABC000001 因此,仅应更新公司名称 1。使用以下代码成功创建索引:- BAT文件elasticsearch 批量创建&;使用Logstash批量更新ElasticSearch索引文档,elasticsearch,logstash,elasticsearch,Logstash,文档未得到更新,而是得到新创建的文档,而不是更新文档 公司ID是唯一的列 样本数据 公司名称、徽标外部、公司ID ABC有限公司,JPG,ABC000001 XYZ有限公司,巴布亚新几内亚,ABC000002 AAA有限责任公司,ABC000003 我能够创建索引和文档 问题是当我更新索引时,文档将被创建而不是更新。 例如。 之前 ABC有限公司,JPG,ABC000001 之后 ABCD有限公司,JPG,ABC000001 因此,仅应更新公司名称 1。使用以下代码成功创建索引:- BAT文件
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
}
}
cd C:\logstash-7.3.1\bin
logstash-fc:\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_ID是唯一的列。除了@polymon 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"
}
}
这将负责索引和更新。您需要使用。另外,阅读关于我添加了action=>“update”doc\u as\u upsert=>“true”,但公司ID仍然重复。它应该更新记录。新建索引时是否必须将{COMPANY_ID}标记为主键?我遗漏了什么吗…?看起来您有多个相同id的事件。您可能需要使用。另外,在sql端按id排序并将工作人员计数更改为1。我添加了action=>“update”doc\u as\u upsert=>“true”,但公司id仍然重复。它应该更新记录。新建索引时是否必须将{COMPANY_ID}标记为主键?我是不是遗漏了什么。。。?