2015-05-20 101 views
0

当我使用此JDBC将Elasticsearch连接到我的MySQL数据库时。Elasticsearch插入重复数据?

我希望它定期获取来自数据库的最新更改,但它看起来像是从日志中复制每次迭代中的所有数据,而不是最近的更改。尽管当我使用REST API进行搜索时,我看不到任何重复项。这是正常的吗?

日志说,这每分钟(与rows与3000〜每次增加):

[INFO] [river.jdbc.RiverMetrics]管道org.xbib.elasticsearch.plugin.jdbc.RiverPipeline @ 273cf2ca complete:river jdbc/items度量:24745行,61.24885239965816平均值,(56.52859885706843 11.685682148116433 3.916887460538012),摄取指标:已用时间0秒,291,25 KB字节,12.0字节平均值,1,061 MB /秒 [2015-05-20 22 :22:15,607] [INFO] [cluster.routing.allocation.decider] [Gideon]在[6TQNFDctRSaYVFyKjQahJA] [Gideon] free:26.6gb [11.4%]上超出了低磁盘水印[15%],副本将不会被分配给这个节点

这是我用来启动JDBC

curl -XPUT 'localhost:9200/_river/items/_meta' -d '{ 
    "type" : "jdbc", 
    "jdbc" : { 
     "url" : "jdbc:mysql://localhost:3306/mydb", 
     "user" : "root", 
     "password" : "123", 
     "sql" : "select items.id as _id from items", 
     "index": "items", 
     "type": "item", 
     "schedule" : "0 0-59 0-23 ? * *" 
    } 
}' 

这是正常的行为呢?

回答

0

是的,这是正常的。 ES总是会重新索引从sql查询返回的所有行。

你可以检查你的文件的_version字段,并看到它在每条河流执行后都会增加。

事实上,你应该避免使用河流,因为它们是deprecated

+0

但是,根据作者的说法,JDBC河流[未来证明](https://github.com/jprante/elasticsearch-jdbc#this-plugin-is-future-proof),因为它可以用作独立模块,这是根据“贬低河流”条款前进的方式之一。 – Val

+0

我会补充说Elasticsearch请求是幂等的,这就是为什么即使您将同一个文档编索引数百次也没有重复 –