尝试使用jdbc river ElasticSearch插件进行批处理

时间:2014-01-30 00:04:04

标签: elasticsearch elasticsearch-jdbc-river elasticsearch-plugin

我需要编写一些索引作业,每天运行一次,查询我们的Oracle数据库表并索引到ElasticSearch。由于存在表依赖性,因此有些表首先索引,其他表接下来。但是围绕索引过程,我需要增强进入ES索引的字段,以及记录我们的Oracle数据库表作业状态,甚至可能记录索引过程成功/失败的记录。

我可以使用Elastic Search插件JDBC-River。

2 个答案:

答案 0 :(得分:5)

我担心的是在从DB中提取查询后通过insert语句重新登录到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"
                    ]
                }
            ]
        }
    }'

答案 1 :(得分:0)

是的,您可以在jdbc river中使用poll参数来执行此操作。详细

<强>轮询

以给定间隔重复JDBC河流运行。此方法也称为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