MongoDB 数据自动同步到 ElasticSearch

咱们产品中须要全文检索的功能,后端数据存储主要使用了 MySQL + MongoDB,而其中须要检索的内容是在 MongoDB 中的。html

MongoDB 自己是自带文本索引功能的,可是,不支持中文。术业有专攻,MongoDB 是数据存储应用,那么全文检索就使用专业的全文搜索引擎吧。python

预选的几个选手有:Solr、ElasticSearch、Xapian、Sphinx、XunSearch。因为咱们的数据量比较大,以为如今单机已经有些力不从心了,MongoDB 也开始计划作分片,那么全文搜索若是自带分布式技能那就最合适不过了。通过一系列的考量,最后,咱们就决定用 ElasticSearch 了。git

如今后端程序是直接将数据写到 MongoDB 中,我不想修改程序代码,不想在增删改 MongoDB 中数据的同时去增删改 ElasticSearch 中的数据。但愿 MongoDB 中数据发送变化时自动同步到 ElasticSearch 中,这样就能够最快地用上 ElasticSearch 了。github

刚开始我找到的方案是利用 ElasticSearch 的 River 来同步数据,并在 GitHub 上到了 MongoDB River 插件:elasticsearch-river-mongodb。可是,随后我又在 ElasticSearch 官网上看了这篇博客:《Deprecating Rivers》,官方已经在 1.5 之后的版本弃用 River,为了用户的迁移,会一直保留到 2.0 版本。mongodb

因而,我得另寻方案了。而后我又在网上找到了另一个方案:mongo-connector。这个是 MongoDB 官方的开发人员用 Python 写的一个工具,目前支持将 MongoDB 的数据同步到 Solr、ElasticSearch、MongoDB 中,而且支持用户本身扩展。看到 README 中的免责声明,我有点以为这是玩票性质的工具,可是仍是抱着试试看的心态决定试试看了。shell

下面是部署过程:后端

  1. MongoDB 必须开启复制集,若是已经开启请忽略这一步:
    配置复制集的名称:mongod --replSet myDevReplSet
    在 mongo shell 中初始化复制集:rs.initiate()api

  2. 安装 ElasticSearch,若是已经安装请忽略这一步。elasticsearch

  3. 安装 mongo-connector:
    先安装 pip:分布式

    yum install python-setuptools && easy_install pip

    经过 pip 安装 mongo-connector:

    pip install mongo-connector
  4. 运行 mongo-connector:

    mongo-connector -m 127.0.0.1:27017 -t 127.0.0.1:9200 -d elastic_doc_manager

OK,如今,在 MongoDB 中增删改数据,都能马上同步到 ElasticSearch 中了。在试用过程当中,mongo-connector 退出过两次,其中一次断开过久没有发觉,害我不得不从新同步。仍是有点不靠谱的感受,可能还得专门写个守护程序,让 mongo-connector 一直能在后台好好干活。

拓展阅读:

相关文章
相关标签/搜索