5

我正在为 ElasticSearch 配置 JDBC River,但找不到任何好的配置示例。我已经阅读了elasticsearch-river-jdbc GitHub 上的所有页面。

我有一个 SQL 查询,我需要每 X 秒从所有表列中获取更改。如何告诉 JDBC River 某行已更改并应重新编制索引?

在 ES 服务器启动期间获取数据,正在进行轮询,但不会将更改从 DB 获取到 ES。

我的配置:

curl -XPUT 'localhost:9200/_river/itemsi/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
    "driver" : "com.mysql.jdbc.Driver",
    "url" : "jdbc:mysql://mydb.com:3306/dbname",
    "user" : "yyy",
    "password" : "xxx",
    "sql" : "SELECT ii.id AS _id, ii.id AS myid, ... FROM ... LEFT JOIN .. ON...",
    "poll" : "6s",
    "strategy" : "simple"
    },
"index" : {
    "index" : "invoiceitems",
    "bulk_size" : 600,
    "max_bulk_requests" : 10,
    "bulk_timeout" : "5s",
    }
}'

谢谢你。

4

3 回答 3

2

您可以使用 schedule 参数来启用 jdbc River 插件的重复运行。

调度参数示例:

"schedule" : "0 0-59 0-23 ? * *"

这会在一周/月/年的每一天、每一分钟、每一小时执行一次 JDBC River。

有关调度参数读取文档的更多详细信息, https://github.com/jprante/elasticsearch-river-jdbc

于 2014-11-28T10:21:10.863 回答
1

添加

“自动提交”:真

在索引设置中。然后问题就解决了

于 2013-10-15T05:14:46.640 回答
0

我只能给你我的意见,因为我目前正在构建一个执行 Informix DB 的大型索引的解决方案。所以这是我目前尚未测试或实施的思维过程 -

我打算做的是对核心数据库本身执行一次索引,从那里实现触发器以将更新的和/或新的记录触发到单独的表中。显然,一旦我执行了初始索引,我将删除该河流以阻止它重新运行主索引,然后我将定义一条河流来轮询表,该表将包含每 15 分钟更新的和/或新的记录并将其加载到 ES 中。

我还没有完全弄清楚的一点是更新 ES 中已经存在的记录,因为我不知道河流插件中有任何功能允许您从实际数据库中的 ID 字段设置记录的 ID记录,允许您从 ES 检索和更新。也许编写一个独立的程序来完成河流插件的功能?!

目前所有的想法和猜测,但正如我所说,我目前正在努力。如果我记得,我可能会回到这里并发布我的最终实现,如果它允许达到那么远的话。

于 2013-08-15T13:09:56.027 回答