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方式:
- $ 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方式:
- 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
相关推荐
总结, 本文详细介绍了使用 Java API 实现与 Elasticsearch 集群交互的方法, 包括连接集群、定义索引字段、索引数据、删除数据、搜索以及数据同步等方面的内容。这些技术对于构建高效稳定的搜索系统至关重要。
【HBase-Elasticsearch数据同步】是大数据领域中常见的数据迁移和整合操作,它涉及到两个重要的分布式存储系统:HBase和Elasticsearch。HBase是一个基于Google Bigtable设计的高可靠性、高性能、分布式的行存数据库...
Mongo-Connector是一个强大的工具,用于将MongoDB的数据同步到其他数据存储系统,如Elasticsearch或Solr。在本案例中,我们关注的是版本2.3.0,它专为pyspark2.3.0和Scala2.11构建。这个版本确保了与特定Spark和...
BBoss-DB-Elasticsearch-Tool提供了一套API,使得开发者能够便捷地将Java对象存入Elasticsearch索引,或者从索引中检索数据,同时支持复杂的查询和聚合操作。 除了基本的CRUD(创建、读取、更新、删除)操作,BBoss...
Elasticsearch(ES)是一种基于Lucene的开源全文搜索引擎,专门设计用于处理大规模数据的分布式、实时搜索和分析引擎。它解决了传统数据库在大规模数据检索时的性能问题。 1. **数据存储**:Elasticsearch采用分片...
10. **监控与日志**:使用Prometheus、Grafana等工具进行性能监控,结合ELK(Elasticsearch、Logstash、Kibana)堆栈实现日志收集和分析,以便及时发现并解决问题。 综上所述,基于JAVA的分布式聊天系统是通过一...
4. **丰富生态**:支持多种数据源和存储系统的对接,包括MySQL、MongoDB、ElasticSearch等。 **四、Flink-CDC对比传统ETL的优势** 1. **简化架构**:无需额外维护Canal或消息队列,直接依赖Flink进行全增量同步和...
Elasticsearch是一个搜索引擎,能够提供快速的搜索功能。 藏经阁-凡普实时数据处理技术是指使用Flink作为核心引擎来处理实时数据流的技术,能够实时地处理来自多种数据源的数据流,并提供了多种数据处理算法和API,...
- 搜索引擎原理,如Lucene、Elasticsearch、Solr、sphinx的工作机制。 10. **性能**: - 性能优化方法论、容量评估、CDN网络、连接池和性能调优。 11. **大数据**: - 流式计算框架如Storm、Flink、Kafka ...
- **Lucene、Solr、ElasticSearch、Sphinx、CoreSeek**:为APP提供高效的搜索功能。 12. **运维**: - **Linux、Nginx、MySQL、Redis、MongoDB**:运维过程中常用的工具和数据库。 - **Docker**:构建和维护一致...
- 搜索模块,通过Elasticsearch实现全文检索。 - 参与需求分析,与团队协作开发,确定接口规范。 - 使用Redis减轻MySQL数据库压力,借助Elastic Job进行数据同步。 - MongoDB用于存储非结构化数据,如评论和回复...
- 日志管理:使用ELK(Elasticsearch、Logstash、Kibana)堆栈收集、分析日志,提供故障排查依据。 总结,"Sistem-informatic-distribuit-pentru-gestionarea-activitatii-unei-biblioteci"是一个深度集成技术、...
通过引入如ELK(Elasticsearch, Logstash, Kibana)堆栈或Prometheus + Grafana等工具,可以实时监控系统状态,快速定位问题。 **9. 数据库设计** 数据库设计包括关系型数据库(如MySQL)或NoSQL数据库(如MongoDB...
它支持多种数据存储技术,如关系型数据库(JPA、Hibernate)、NoSQL数据库(MongoDB、Couchbase)和搜索引擎(Elasticsearch)等。 2. **主要功能** - 提供基于注解的查询方法,无需编写SQL或HQL,只需在接口方法...
- 熟悉Elasticsearch和Lucene,用于全文搜索和索引服务。 6. **开源框架与微服务**: - 熟练运用Spring、Mybatis、SpringCloud2.0等框架,理解其核心设计思想,如IOC、DI、AOP。 - 熟悉微服务相关框架如Dubbo、...
10. **监控与日志管理**:Prometheus和Grafana用于系统性能监控,ELK(Elasticsearch、Logstash、Kibana)组合用于日志收集和分析,帮助团队及时发现并解决问题。 以上是谷粒商城项目中涉及的关键技术点,通过学习...
- **监控与日志**:利用Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等工具进行系统监控和日志分析。 以上是构建一个聊天工具可能涉及的一些技术点,具体的实现细节会因项目需求和技术选型而异。若...
- **全文搜索**:掌握Solr和Elasticsearch,能进行大规模数据的检索和高亮显示。 - **NoSQL**:使用过MongoDB,对基于内存的非关系型数据库有一定了解。 - **微服务**:基于Eureka、Ribbon、Feign构建微服务架构...
为了确保交易的原子性和一致性,Java的JTA(Java Transaction API)和Spring的Transaction Management可以用来处理分布式事务,确保即使在部分操作失败时,整个交易也能回滚到一致状态。 6. **并发与性能** 高...
Log4j、SLF4J等日志框架可以帮助开发者记录和分类日志,而Elasticsearch、Logstash和Kibana(ELK栈)组合则可以提供日志的收集、分析和可视化,方便进行日志查询。 6. **用户管理**:用户管理包括注册、登录、权限...