美文网首页ELK stackmongoDB工作专题
利用mongo-connector将mongodb中数据同步到e

利用mongo-connector将mongodb中数据同步到e

作者: yaya520 | 来源:发表于2017-07-17 20:53 被阅读177次

    因为项目中需要对mongodb中数据实现全文检索的功能,但mongodb的全文检索不支持英文。而 elasticsearch 可以很好的支持各种语言的全文检索。当然我们可以在保存数据到mongodb的同时保存到elasticsearch中一份,但需要大面积修改原本的业务逻辑,并不可行。所以我们无疑就想到了同步。同步的几种方案大概可以参照这篇文章:5 ways to synchronize data from MongoDb to ElasticSearch。对于实际的项目来说,同步方案可以使用 river 或 mongo-connector。但前者已经不再维护了,后者则得到了 mongo 官方的支持,因此选用它作为同步方案。接下来就说一下步骤吧。

    1、搭建mongodb副本集

    使用mongo-connector同步数据首先需要确保mongodb为副本集,这一步是必不可少的,因为ES是通过mongodb的oplog去建立索引,如果不是副本集就没有oplog,当然也就无法建立索引了。如何搭建mongodb副本集请参考这篇文章:mongodb副本集的搭建

    2、下载安装elasticsearch

    下载安装elasticsearch比较简单,但还是有很多坑的,这里给出下载安装链接:Linux下elasticsearch的安装配置以及head插件的安装使用

    3、下载安装mongo-connector

    比较简单,参照:https://github.com/mongodb-labs/mongo-connector

    4、同步数据

    ① 启动mongodb副本集群
    ② 启动elasticsearch集群
    ③ 启动mongo-connector。我这里的启动命令为:mongo-connector -m 192.168.198.224:27017 -t 192.168.198.223:9200 -d elastic2_doc_manager。(mongodb中的数据库对应es中的index,表名对应es中index的type,es会自动创建索引和映射,不过在同步之前手动创建映射会比较好。)
    ④ 启动本地的elasticsearch-head。浏览器进入localhost:9100查看集群状态以及数据是否同步。

    5、ik分词器的安装与使用

    由于elasticsearch内置的分词器对于中文并不友好,会把中文的一句话分割成一个个的汉字,不能很好的达到我们想要的效果。我们可以使用ik分词器插件就可以很好地解决问题了。ik分词器的安装:elasticsearch 中文ik分词器的安装使用

    6、使用node.js来查询elasticsearch中的数据

    下载elasticsearch的node.js的npm模块包:https://github.com/elastic/elasticsearch-js
    elasticsearch-js API:
    https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html

    连接elasticsearch的代码示例如下:

    varelasticsearch =require('elasticsearch');varclient =newelasticsearch.Client({
       host:'localhost:9200',
       log:'trace'
    });

    查询示例如下:

    client.search({
       index: 'myindex',
       q: 'title:test'
    }, function (error, response) {
       // ...
    });

    写的比较简单,参考资料:
    使用 Elasticsearch 实现博客站内搜索

    相关文章

      网友评论

        本文标题:利用mongo-connector将mongodb中数据同步到e

        本文链接:https://www.haomeiwen.com/subject/ehrwhxtx.html