【问题标题】:Fetching changes from table with ElasticSearch JDBC river使用 ElasticSearch JDBC River 从表中获取更改
【发布时间】:2013-08-17 08:52:30
【问题描述】:

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

我有一个 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",
    }
}'

谢谢。

【问题讨论】:

    标签: mysql lucene full-text-search elasticsearch elasticsearch-jdbc-river


    【解决方案1】:

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

    调度参数示例:

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

    这会每分钟、每小时、每周/每月/每年的所有日子执行 JDBC River。

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

    【讨论】:

      【解决方案2】:

      添加

      “自动提交”:真

      在索引设置中。那么问题就解决了

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

        • 谢谢!由于缺乏 ElasticSearch 的文档,我正在考虑 Sphinx。但是,如果您在研究之后在那里写信,我会很高兴。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 2015-06-22
        相关资源
        最近更新 更多