设为首页 收藏本站
查看: 1050|回复: 0

[经验分享] 7.分布式搜索elasticsearch java API ------与MongoDB同步数据

[复制链接]

尚未签到

发表于 2017-5-21 10:09:45 | 显示全部楼层 |阅读模式
 elasticsearch提供river这个模块来读取数据源中的数据到es中,es官方有提供couchDB的同步插件,因为项目用到的是mongodb,所以在找mongodb方面的同步插件,在git上找到了elasticsearch-river-mongodb。
       这个插件最初是由aparo写的,最开始的功能就是读取mongodb里面的表,记录最后一条数据的id,根据时间间隔不断访问mongodb,看看有没有大于之前记录的id的数据,有的话就索引数据,这种做法的缺点就是只能同步最新的数据,修改或删除的就不能同步。后来又由richardwilly98等人修改成通过读取mongodb的oplog来同步数据。因为mongodb是通过oplog这个表来使集群中的不同机器数据同步的,这样做的话可以保证es里面的数据和mongodb里面的是一样的,因为mongodb中的数据一有改变,都会通过oplog反映到monogodb中。他们还添加了个索引mongodb gridfs里文件的功能,非常好。
        但他们修改完后的插件还是有些不满意的地方。他把local库(放oplog的)和普通库的访问密码都设置成同一个,如果local库和普通库的用户名和密码不同那这个插件就不能用了。还有一个就是同步时会把mongodb的表中所有的字段都同步过去,但是有些字段我们并不想把它放到索引中,于是对这个插件再作修改,把local库和普通库的鉴权分开,添加可选字段功能。
 
运行环境:Elasticsearch 0.19.X
                  集群环境下的MongoDB 2.X
注意:该插件只支持集群环境下的mongodb,因为集群环境下的mongodb才有oplog这个表。

安装方法:
安装elasticsearch-mapper-attachments插件(用于索引gridfs里的文件)
%ES_HOME%\bin\plugin.bat -install elasticsearch/elasticsearch-mapper-attachments/1.4.0

安装elasticsearch-river-mongodb(同步插件)
%ES_HOME%\bin\plugin.bat -install laigood/elasticsearch-river-mongodb/laigoodv1.0.0

 
创建river方法:
curl方式:
[plain] view plaincopy



  • $ curl -XPUT "localhost:9200/_river/mongodb/_meta" -d '  
  • {  
  •   type: "mongodb",  
  •   mongodb: {   
  •     db: "test",   
  •     host: "localhost",   
  •     port: "27017",   
  •     collection: "testdb",  
  •     fields:"title,content",  
  •     gridfs: "true",  
  •     local_db_user: "admin",  
  •     local_db_password:"admin",  
  •     db_user: "user",  
  •     db_password:"password"  
  •   },   
  •   index: {   
  •     name: "test",   
  •     type: "type",  
  •     bulk_size: "1000",   
  •     bulk_timeout: "30"  
  •   }  
  • }  

db为同步的数据库名, 
host mongodb的ip地址(默认为localhost), 
port mongodb的端口,
collection 要同步的表名
fields 要同步的字段名(用逗号隔开,默认全部)
gridfs 是否是gridfs文件(如果collection是gridfs的话就设置成true)
local_db_user local数据库的用户名(没有的话不用写)
local_db_password local数据库的密码(没有的话不用写)
db_user 要同步的数据库的密码(没有的话不用写)
db_password 要同步的数据库的密码(没有的话不用写)
name 索引名(不能之前存在)
type 类型
bulk_size 批量添加的最大数
bulk_timeout 批量添加的超时时间

java api方式:
[java] view plaincopy



  • client.prepareIndex("_river", "testriver", "_meta")  
  •         .setSource(  
  •             jsonBuilder().startObject()  
  •                 .field("type", "mongodb")  
  •                 .startObject("mongodb")  
  •                         .field("host","localhost")  
  •                         .field("port",27017)  
  •                         .field("db","testdb")  
  •                         .field("collection","test")  
  •                         .field("fields","title,content")  
  •                         .field("db_user","user")  
  •               <span style="white-space:pre">                </span>.field("db_password","password")  
  •                         .field("local_db_user","admin")  
  •                   <span style="white-space:pre">        </span>.field("local_db_password","admin")  
  •                         .endObject()                                              
  •                  .startObject("index")  
  •                         .field("name","test")  
  •                         .field("type","test")  
  •                         .field("bulk_size","1000")  
  •                         .field("bulk_timeout","30")  
  •                         .endObject()  
  •                  .endObject()  
  •         ).execute().actionGet();  

 
本插件git地址:https://github.com/laigood/elasticsearch-river-mongodb
参考资料:http://www.searchtech.pro/articles/2013/02/18/1361191176552.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379519-1-1.html 上篇帖子: [转载]基于Luence的分布式搜索引擎ElasticSearch搜索实例演示(Java API) 下篇帖子: 使用Java调用ElasticSearch提供的相关API进行数据搜索完整实例演示
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表