`
wbj0110
  • 浏览: 1586301 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

7.分布式搜索elasticsearch java API ------与MongoDB同步数据

阅读更多

 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
  1. $ curl -XPUT "localhost:9200/_river/mongodb/_meta" -d '  
  2. {  
  3.   type: "mongodb",  
  4.   mongodb: {   
  5.     db: "test",   
  6.     host: "localhost",   
  7.     port: "27017",   
  8.     collection: "testdb",  
  9.     fields:"title,content",  
  10.     gridfs: "true",  
  11.     local_db_user: "admin",  
  12.     local_db_password:"admin",  
  13.     db_user: "user",  
  14.     db_password:"password"  
  15.   },   
  16.   index: {   
  17.     name: "test",   
  18.     type: "type",  
  19.     bulk_size: "1000",   
  20.     bulk_timeout: "30"  
  21.   }  
  22. }  

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
  1. client.prepareIndex("_river", "testriver", "_meta")  
  2.         .setSource(  
  3.             jsonBuilder().startObject()  
  4.                 .field("type", "mongodb")  
  5.                 .startObject("mongodb")  
  6.                         .field("host","localhost")  
  7.                         .field("port",27017)  
  8.                         .field("db","testdb")  
  9.                         .field("collection","test")  
  10.                         .field("fields","title,content")  
  11.                         .field("db_user","user")  
  12.               <span style="white-space:pre">                </span>.field("db_password","password")  
  13.                         .field("local_db_user","admin")  
  14.                   <span style="white-space:pre">        </span>.field("local_db_password","admin")  
  15.                         .endObject()                                              
  16.                  .startObject("index")  
  17.                         .field("name","test")  
  18.                         .field("type","test")  
  19.                         .field("bulk_size","1000")  
  20.                         .field("bulk_timeout","30")  
  21.                         .endObject()  
  22.                  .endObject()  
  23.         ).execute().actionGet();  

 

本插件git地址:https://github.com/laigood/elasticsearch-river-mongodb

参考资料:http://www.searchtech.pro/articles/2013/02/18/1361191176552.html

分享到:
评论

相关推荐

    分布式搜索 elasticsearch 方案研究 - Java API

    总结, 本文详细介绍了使用 Java API 实现与 Elasticsearch 集群交互的方法, 包括连接集群、定义索引字段、索引数据、删除数据、搜索以及数据同步等方面的内容。这些技术对于构建高效稳定的搜索系统至关重要。

    HBase-Elasticsearch数据同步1

    【HBase-Elasticsearch数据同步】是大数据领域中常见的数据迁移和整合操作,它涉及到两个重要的分布式存储系统:HBase和Elasticsearch。HBase是一个基于Google Bigtable设计的高可靠性、高性能、分布式的行存数据库...

    mongo-connector-2.11-2.3.0

    Mongo-Connector是一个强大的工具,用于将MongoDB的数据同步到其他数据存储系统,如Elasticsearch或Solr。在本案例中,我们关注的是版本2.3.0,它专为pyspark2.3.0和Scala2.11构建。这个版本确保了与特定Spark和...

    bboss-db-elasticsearch-tool-master_java_

    BBoss-DB-Elasticsearch-Tool提供了一套API,使得开发者能够便捷地将Java对象存入Elasticsearch索引,或者从索引中检索数据,同时支持复杂的查询和聚合操作。 除了基本的CRUD(创建、读取、更新、删除)操作,BBoss...

    ES分布式搜索解决方案.docx

    Elasticsearch(ES)是一种基于Lucene的开源全文搜索引擎,专门设计用于处理大规模数据的分布式、实时搜索和分析引擎。它解决了传统数据库在大规模数据检索时的性能问题。 1. **数据存储**:Elasticsearch采用分片...

    基于JAVA的分布式聊天系统.zip_8SMV_JAVA分布式_condition6md_分布式_基于JAVA的分布式聊天系统

    10. **监控与日志**:使用Prometheus、Grafana等工具进行性能监控,结合ELK(Elasticsearch、Logstash、Kibana)堆栈实现日志收集和分析,以便及时发现并解决问题。 综上所述,基于JAVA的分布式聊天系统是通过一...

    基于flink-cdc实现监控数据源的实时变更数据捕获

    4. **丰富生态**:支持多种数据源和存储系统的对接,包括MySQL、MongoDB、ElasticSearch等。 **四、Flink-CDC对比传统ETL的优势** 1. **简化架构**:无需额外维护Canal或消息队列,直接依赖Flink进行全增量同步和...

    藏经阁-凡普实时数据处理.pdf

    Elasticsearch是一个搜索引擎,能够提供快速的搜索功能。 藏经阁-凡普实时数据处理技术是指使用Flink作为核心引擎来处理实时数据流的技术,能够实时地处理来自多种数据源的数据流,并提供了多种数据处理算法和API,...

    后端架构师技术图谱.docx

    - 搜索引擎原理,如Lucene、Elasticsearch、Solr、sphinx的工作机制。 10. **性能**: - 性能优化方法论、容量评估、CDN网络、连接池和性能调优。 11. **大数据**: - 流式计算框架如Storm、Flink、Kafka ...

    APP开发架构规划.doc

    - **Lucene、Solr、ElasticSearch、Sphinx、CoreSeek**:为APP提供高效的搜索功能。 12. **运维**: - **Linux、Nginx、MySQL、Redis、MongoDB**:运维过程中常用的工具和数据库。 - **Docker**:构建和维护一致...

    贝吉塔+Java开发+1年.docx

    - 搜索模块,通过Elasticsearch实现全文检索。 - 参与需求分析,与团队协作开发,确定接口规范。 - 使用Redis减轻MySQL数据库压力,借助Elastic Job进行数据同步。 - MongoDB用于存储非结构化数据,如评论和回复...

    Sistem-informatic-distribuit-pentru-gestionarea-activitatii-unei-biblioteci

    - 日志管理:使用ELK(Elasticsearch、Logstash、Kibana)堆栈收集、分析日志,提供故障排查依据。 总结,"Sistem-informatic-distribuit-pentru-gestionarea-activitatii-unei-biblioteci"是一个深度集成技术、...

    基于Java网络游戏后台管理系统.zip

    通过引入如ELK(Elasticsearch, Logstash, Kibana)堆栈或Prometheus + Grafana等工具,可以实时监控系统状态,快速定位问题。 **9. 数据库设计** 数据库设计包括关系型数据库(如MySQL)或NoSQL数据库(如MongoDB...

    尚硅谷SpringData视频观看下载链接

    它支持多种数据存储技术,如关系型数据库(JPA、Hibernate)、NoSQL数据库(MongoDB、Couchbase)和搜索引擎(Elasticsearch)等。 2. **主要功能** - 提供基于注解的查询方法,无需编写SQL或HQL,只需在接口方法...

    五年工作经验优秀简历模版

    - 熟悉Elasticsearch和Lucene,用于全文搜索和索引服务。 6. **开源框架与微服务**: - 熟练运用Spring、Mybatis、SpringCloud2.0等框架,理解其核心设计思想,如IOC、DI、AOP。 - 熟悉微服务相关框架如Dubbo、...

    谷粒商城 微服务分布式 电商项目 2020 完整代码

    10. **监控与日志管理**:Prometheus和Grafana用于系统性能监控,ELK(Elasticsearch、Logstash、Kibana)组合用于日志收集和分析,帮助团队及时发现并解决问题。 以上是谷粒商城项目中涉及的关键技术点,通过学习...

    pushlet聊天工具编辑中。。。。

    - **监控与日志**:利用Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等工具进行系统监控和日志分析。 以上是构建一个聊天工具可能涉及的一些技术点,具体的实现细节会因项目需求和技术选型而异。若...

    java简历模版5.doc

    - **全文搜索**:掌握Solr和Elasticsearch,能进行大规模数据的检索和高亮显示。 - **NoSQL**:使用过MongoDB,对基于内存的非关系型数据库有一定了解。 - **微服务**:基于Eureka、Ribbon、Feign构建微服务架构...

    用java编写的在线交易(代码)

    为了确保交易的原子性和一致性,Java的JTA(Java Transaction API)和Spring的Transaction Management可以用来处理分布式事务,确保即使在部分操作失败时,整个交易也能回滚到一致状态。 6. **并发与性能** 高...

    Java做的IM聊天软件服务端

    Log4j、SLF4J等日志框架可以帮助开发者记录和分类日志,而Elasticsearch、Logstash和Kibana(ELK栈)组合则可以提供日志的收集、分析和可视化,方便进行日志查询。 6. **用户管理**:用户管理包括注册、登录、权限...

Global site tag (gtag.js) - Google Analytics