MongoDB資料自動同步到ElasticSearch(實現中文全文檢索)
阿新 • • 發佈:2019-01-29
問題-方案
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" : "王" } } }'