我需要编写一些索引作业,每天运行一次,查询我们的 Oracle 数据库表并索引到 ElasticSearch。由于存在表依赖关系,一些表首先索引,其他表随后索引。但是围绕索引过程,我需要增强进入 ES 索引的字段,以及记录到我们的 Oracle 数据库表作业状态,甚至可能是索引过程成功/失败的记录。
我可以使用 Elastic Search 插件 JDBC-River。
我需要编写一些索引作业,每天运行一次,查询我们的 Oracle 数据库表并索引到 ElasticSearch。由于存在表依赖关系,一些表首先索引,其他表随后索引。但是围绕索引过程,我需要增强进入 ES 索引的字段,以及记录到我们的 Oracle 数据库表作业状态,甚至可能是索引过程成功/失败的记录。
我可以使用 Elastic Search 插件 JDBC-River。
我担心的是在查询后通过插入语句登录回 RDBS 以从数据库中提取。我与 jdbc-river 的创建者取得了联系。他提到这是我应该如何配置的东西:真的很有帮助!
curl -XDELETE '0:9200/_river/my_jdbc_river/
curl -XPUT '0:9200/_river/my_jdbc_river/_meta' -d '
{
"type": "jdbc",
"jdbc": {
"url": "jdbc:mysql://localhost:3306/test",
"user": "",
"password": "",
"schedule": "0 0-59 0-23 ? * *",
"sql": [
{
"statement": "select *, created as _id, \"myjdbc\" as _index, \"mytype\" as _type from orders"
},
{
"statement": "insert into ack(n,t,c) values(?,?,?)",
"parameter": [
"$job",
"$now",
"$count"
]
}
]
}
}'
poll
是的,您可以通过在 jdbc River 中使用参数来执行此操作。详细地
轮询
JDBC River 运行以给定的时间间隔重复。此方法也称为polling
. 您可以使用 poll 参数指定轮询间隔,该参数采用 Elasticsearch 时间值。默认值为1h
。
示例:-
curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/test",
"user" : "",
"password" : "",
"sql" : "select * from orders",
"poll" : "1h"
},
"index" : {
"index" : "jdbc",
"type" : "jdbc",
"bulk_size" : 100,
"max_bulk_requests" : 30,
"bulk_timeout" : "60s"
}
}'
供您参考:- https://github.com/jprante/elasticsearch-river-jdbc/issues/92