問題-方案
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
- 2
- 3
- 1
- 2
- 3
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
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
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
- 1
- 2
- 1
- 2
二.測試
在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"})
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
通過 elasticsearch 容器進行檢索
curl -XGET -H 'charset=UTF-8' 127.0.0.1:9200/test/col/_search -d '{ "query" : { "match" : { "name" : "王" } } }