您的位置:首页 > 数据库 > Mongodb

MongoDB数据自动同步到ElasticSearch(实现中文全文检索)

2016-02-25 11:35 846 查看

问题-方案

1.产品需要全文检索,数据库是使用的MongoDB,MongoDB的全文检索太慢,打算使用ElasticSearch

2.方案1:利用 ElasticSearch 的 River 来同步数据,

在github上有MongoDB River的插件:https://github.com/richardwilly98/elasticsearch-river-mongodb

可以看到使用的版本很旧,原因是官方已经在 1.5 以后的版本弃用 River,为了用户的迁移,会一直保留到 2.0 版本。所以这个方案的可行性比较低,但是是可以使用的。

3.方案2:利用mongo-connector,

https://github.com/mongodb-labs/mongo-connector

这个是 MongoDB 官方的开发人员用 Python 写的一个工具,目前支持将 MongoDB 的数据同步到 Solr、ElasticSearch、MongoDB 中,并且支持用户自己扩展。

实际(方案2)

一.安装Elasticsearch并配置

0.MongoDB必须开启复制集
配置复制集的名称:mongod --replSet myDevReplSet
在 mongo shell 中初始化复制集:rs.initiate()


1.下载Elasticsearch,安装java
rpm -i xxx
sudo service elasticsearch start
出现问题,找不到java home,google发现需要在
/etc/sysconfig/elasticsearch中添加JAVA_HOME=/icksys/jdk1.8.0_72/jre
重新启动服务,works


2.配置mongo-connector
先安装pip:
yum install python-setuptools && easy_install pip
通过pip安装mongo-connector
pip install mongo-connector


3.运行mongo-connector
mongo-connector -m 127.0.0.1:27017 -t 127.0.0.1:9200 -d elastic_doc_manager


二.测试

在mongo容器中写入测试数据

use test
db.col.insert({name:"王晓明", birth:"1980-01-01"})
db.col.insert({name:"王东东", birth:"1981-01-01"})
db.col.insert({name:"张丽敏", birth:"1982-01-01"})


通过 elasticsearch 容器进行检索

curl -XGET -H 'charset=UTF-8' 127.0.0.1:9200/test/col/_search -d '{ "query" : { "match" : { "name" : "王" } } }'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息