gpt4 book ai didi

mysql - 将数据从 mysql 同步到 Elasticsearch 的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-29 05:13:56 24 4
gpt4 key购买 nike

我有 ES 2.2 并为 Elasticsearch elasticsearch-jdbc-2.2.0.0 安装了 JDBC 导入器,并且能够插入数据,但不能通过更改 mysql 来更新 ES,即。 mysql 与 ES 的同步。我如何进行同步?我执行了一次以下 shell 脚本,数据已正确插入,但调度程序无法正常工作。它不是每分钟都执行以捕获 mysql(方案表)中的任何更改。我的脚本有什么问题吗?或任何可用的解决方法?

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
bin=${DIR}/bin
lib=${DIR}/lib
echo $lib
echo $bin

echo '{
"type" : "jdbc",
"autocommit" : true,
"schedule" : "0 0-59 0-23 ? * *",
"jdbc" : {
"driver": "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://XXX:3306/blahblah",
"user" : "abc",
"password" : "xyz",
"sql" : "select * from schemes",
"elasticsearch" : {
"cluster" : "mycluster",
"host" : "localhost",
"port" : 9300
},
"max_bulk_actions" : 20000,
"max_concurrent_bulk_requests" : 10,
"index" : "movies",
"type":"scheme"
}
}
' | java -cp "${lib}/*" -Dlog4j.configurationFile=${bin}/log4j2.xml org.xbib.tools.Runner org.xbib.tools.JDBCImporter

最佳答案

我建议使用 Logstash jdbc-plugin将 MySQL 数据同步到 Elasticsearch。

来自反对者的评论,询问如何将删除的记录从 MySQL 同步到 Elasticsearch

可能还有其他一些有效的方法可以将已删除的记录从 MySQL 同步到 Elasticsearch :) 但我在这里分享我所做的。

第 1 步:让我们以模式表为例。添加一列以维护该模式的状态。类似于 status = 0(默认)和 status = 1(已删除)。以及 updated_date 的一列。当删除任何记录时,将 status=1 和 updated_date 更改为当前日期。

第 2 步:

我们不需要每次都同步整个数据。索引完整数据一次,然后更改 mysql 查询以获取最近 24 小时或适合您的用例的任何时间间隔的记录。

第 3 步:更改查询以仅获取过去 24 小时的数据

 select * from schemes where (updated_date >= FROM_UNIXTIME(UNIX_TIMESTAMP(?)-86400,"%Y-%m-%d"))

现在您删除的数据状态将在您的 Elasticsearch 索引中更改为 status=1。

所以你可以像这样查询你的事件记录

{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"status": 1
}
}
]
}
}
}
}
}

关于mysql - 将数据从 mysql 同步到 Elasticsearch 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com