ElasticSearch 和现有 MySQL 数据库

ElasticSearch and existing MySQL database

我有 MySQL 包含数据的数据库。数据库中存在多对多关系 - 父表、子表和引用表。
我想添加全文搜索功能。我想知道 elasticsearch 是否可以帮助我。我找到了 jdbc 插件。据我了解,我必须使用以下代码为现有数据编制索引:

curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "jdbc:mysql://localhost:3306/test",
        "user" : "",
        "password" : "",
        "sql" : "any complex sql query, it can be select from 3 tables"
    }
}'

所以我有以下问题:

  1. 不管我有什么样的数据库方案。我只有 提供 sql 查询和 elasticsearch 索引获取的数据。 这样对吗?
  2. 添加新数据时需要做什么?我应该 在两个地方添加新记录?在 sql 数据库和 elastichsearch 指数?这是对的吗?谢谢。

文档摘录river documentation

  1. scheme无所谓,查询的结果会转换成有效的Elasticsearch JSON:

将生成以下 JSON 个文件:

id=<random> {"product":"Apples","created":null,"department":"American Fruits","quantity":1,"customer":"Big"}
id=<random> {"product":"Bananas","created":null,"department":"German Fruits","quantity":1,"customer":"Large"}
id=<random> {"product":"Oranges","created":null,"department":"German Fruits","quantity":2,"customer":"Huge"}
id=<random> {"product":"Apples","created":1338501600000,"department":"German Fruits","quantity":2,"customer":"Good"}
id=<random> {"product":"Oranges","created":1338501600000,"department":"English Fruits","quantity":3,"c
  1. 建议使用UTC时间戳进行同步。此示例使用毫秒分辨率列 mytimestamp:

    获取自上一条河流 运行 以来添加的所有产品行
    {
        "type" : "jdbc",
        "jdbc" : {
            "url" : "jdbc:mysql://localhost:3306/test",
            "user" : "",
            "password" : "",
            "sql" : [
                {
                    "statement" : "select * from \"products\" where \"mytimestamp\" > ?",
                    "parameter" : [ "$river.state.last_active_begin" ]
                }
            ],
            "index" : "my_jdbc_river_index",
            "type" : "my_jdbc_river_type"
        }
    }