摘要:一前言因公司需要選用做全文檢索,持久化存儲(chǔ)選用的是,但是希望里面的數(shù)據(jù)發(fā)生改變可以實(shí)時(shí)同步到上,一開始主要使用的版本,可以搞定這個(gè)問題?;蛘咝薷闹械哪骋粭l數(shù)據(jù),也會(huì)實(shí)時(shí)同步到中。如何把的主文檔和附件信息都同步到中利用的來實(shí)現(xiàn)。
一、前言
因公司需要選用elasticsearch做全文檢索,持久化存儲(chǔ)選用的是mongodb,但是希望mongodb里面的數(shù)據(jù)發(fā)生改變可以實(shí)時(shí)同步到elasticsearch上,一開始主要使用elasticsearch v1.7.2的版本,mongo-river可以搞定這個(gè)問題。隨著elasticsearch的升級(jí),發(fā)現(xiàn)elasticsearch已經(jīng)放棄了mongo-river,咋整......Google之后發(fā)現(xiàn)一神器mongo-connector,國(guó)外大神用python寫的工具而且MongoDB官網(wǎng)也極力推薦使用。But,我們需要把文檔中的附件信息也同步到elasticsearch上,mongo-connector對(duì)附件同步支持的不是很好。能不能有個(gè)nodejs版本的數(shù)據(jù)同步?GitHub上發(fā)現(xiàn)一個(gè)大神寫的node-elasticsearch-sync很好用,但是功能太簡(jiǎn)單了,不支持復(fù)雜的數(shù)據(jù)篩選,也不支持附件同步?;钊瞬荒鼙荒虮锼?,參考node-elasticsearch-sync自己寫了一個(gè)同步工具node-mongodb-es-connector。
二、準(zhǔn)備工作2.1 安裝mongodb
安裝mongodb可以去官網(wǎng)下載:
https://www.mongodb.com/
PS:關(guān)于如何搭建mongodb replica集群:
https://www.cnblogs.com/ljhdo...
2.2 安裝elasticsearch
安裝elasticsearch可以去官網(wǎng)下載:
https://www.elastic.co/cn/dow...
PS:關(guān)于elasticsearch-head、kibana、logstash等相關(guān)安裝請(qǐng)自己google吧
2.3 安裝nodejs
安裝nodejs可以去官網(wǎng)下載:
http://nodejs.cn/
PS:別忘記安裝npm,如何安裝請(qǐng)自己google吧
以上是使用node-mongodb-es-connector的前提
2.4 node-mongodb-es-connector下載地址
github: https://github.com/zhr8521007...
npm: https://www.npmjs.com/package...
三、文件結(jié)構(gòu)├── crawlerDataConfig 項(xiàng)目構(gòu)建配置(這里添加你要同步數(shù)據(jù)的配置) │ ├── mycarts.json 一個(gè)index一個(gè)配置文件(唯一需要自己增加或者修改的配置文件,這個(gè)文件只是提供了一個(gè)例子,不用可以刪除) │ └── …… ├── lib │ ├── pool │ │ ├── elasticsearchPool.js elasticsearch連接池 │ │ ├── mongoDBPool.js mongodb連接池 │ ├── promise │ │ ├── elasticsearchPromise.js elasticsearch方法類(增刪改查) │ │ ├── mongoPromise.js mongodb方法類(增刪改查) │ ├── util │ │ ├── fsWatcher.js 配置文件監(jiān)控類(主要監(jiān)控crawlerDataConfig目錄里面的配置文件) │ │ ├── logger.js 日志類 │ │ ├── oplogFactory.js mongo-oplog觸發(fā)事件之后的執(zhí)行方法(增刪改) │ │ ├── tail.js 監(jiān)聽mongodb數(shù)據(jù)是否發(fā)生變化 │ │ ├── util.js 工具類 │ ├── main.js 主方法(主要是第一次啟動(dòng)立刻同步mongodb里面的數(shù)據(jù)到elasticsearch) ├── logs │ ├── logger-2018-03-23.log 同步數(shù)據(jù)打印日志 │ └── …… ├── test │ ├── img │ │ ├── elasticsearch.jpg 圖片不解釋 │ │ ├── mongoDB.jpg 圖片不解釋 │ │ └── structure.jpg 圖片不解釋 │ └── test.js 測(cè)試類(啥也沒寫) ├── app.js 啟動(dòng)文件 ├── index.js 接口文件(只提供配置文件的增刪改) ├── package-lock.json ├── package.json ├── ReadMe.md 英文文檔(markdown) ├── README.zh-CN.md 中文文檔(markdown) └── LICENSE
mycarts.json文件(這個(gè)文件只是提供了一個(gè)例子)
{ "mongodb": { "m_database": "myTest", "m_collectionname": "carts", "m_filterfilds": { "version" : "2.0" }, "m_returnfilds": { "cName": 1, "cPrice": 1, "cImgSrc": 1 }, "m_connection": { "m_servers": [ "localhost:29031", "localhost:29032", "localhost:29033" ], "m_authentication": { "username": "UserAdmin", "password": "pass1234", "authsource":"admin", "replicaset":"my_replica", "ssl":false } }, "m_documentsinbatch": 5000, "m_delaytime": 1000 }, "elasticsearch": { "e_index": "mycarts", "e_type": "carts", "e_connection": { "e_server": "http://localhost:9200", "e_httpauth": { "username": "EsAdmin", "password": "pass1234" } }, "e_pipeline": "mypipeline", "e_iscontainattachment": true } }
m_database - MongoDB里需要監(jiān)聽的數(shù)據(jù)庫(kù).
m_collectionname - MongoDB里需要監(jiān)聽的collection.
m_filterfilds - MongoDB里的查詢條件,目前支持一些簡(jiǎn)單的查詢條件.(默認(rèn)值為null)
m_returnfilds - MongoDB需要返回的字段.(默認(rèn)值為null)
m_connection
m_servers - MongoDB服務(wù)器的地址.(replica結(jié)構(gòu),數(shù)組格式)
m_authentication - 如果需要MongoDB的登錄驗(yàn)證使用下面配置(默認(rèn)值為null).
- username - MongoDB連接的用戶名. - password - MongoDB連接的密碼. - authsource - MongoDB用戶認(rèn)證,默認(rèn)為admin. - replicaset - MongoDB的replica結(jié)構(gòu)的名字. - ssl- MongoDB的ssl.(默認(rèn)值為false).
m_documentsinbatch - 一次性從mongodb往Elasticsearch里傳入數(shù)據(jù)的條數(shù).
(你可以設(shè)置比較大的值,默認(rèn)為1000.).
m_delaytime - 每次進(jìn)elasticsearch數(shù)據(jù)的間隔時(shí)間(默認(rèn)值為1000ms).
e_index - ElasticSearch里的index.
e_type - ElasticSearch里的type,這里的type主要為了使用bulk.
e_connection
e_server - ElasticSearch的連接字符串.
e_httpauth - 如果ElasticSearch需要登錄驗(yàn)證使用下面配置(默認(rèn)值為null).
username - ElasticSearch連接的用戶名.
password - ElasticSearch連接的密碼.
e_pipeline - ElasticSearch 中pipeline的名稱.(沒有pipeline就填null)
e_iscontainattachment - pipeline是否包含附件規(guī)則(默認(rèn)值為false).
四、如何使用用戶可以事先在/crawlerDataConfig目錄下編輯好自己的配置文件,文件必須以json格式存放.
在文件根目錄下,打開cmd命令窗口,輸入以下信息:
node app.js
項(xiàng)目啟動(dòng)后,修改配置文件 (如:mycarts.json),數(shù)據(jù)也會(huì)實(shí)時(shí)同步。或者修改mongodb中的某一條數(shù)據(jù),也會(huì)實(shí)時(shí)同步到elasticsearch中。
PS:如何把mongodb的主文檔和附件信息都同步到elasticsearch中?
利用elasticsearch的pipeline來實(shí)現(xiàn)。
首先需要?jiǎng)?chuàng)建一個(gè)pipeline到elasticsearch中:
PUT _ingest/pipeline/mypipeline { "description" : "Extract attachment information from arrays", "processors" : [ { "foreach": { "field": "attachments", "processor": { "attachment": { "target_field": "_ingest._value.attachment", "field": "_ingest._value.data" } } } } ] }
然后在配置文件中(如:mycarts.json)修改節(jié)點(diǎn)數(shù)據(jù)即可
"e_pipeline": "mypipeline"五、結(jié)果展示
mongodb里面的數(shù)據(jù)
elasticsearch里面的數(shù)據(jù)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19241.html
摘要:項(xiàng)目簡(jiǎn)介前端站點(diǎn)項(xiàng)目效果預(yù)覽使用實(shí)現(xiàn)磁力鏈接爬蟲磁力鏈接解析成種子信息,保存到數(shù)據(jù)庫(kù),利用實(shí)現(xiàn)中文檢索。搭建磁力鏈接搜索引擎源碼地址后端腳本磁力鏈接獲取磁力鏈接解析入庫(kù)定時(shí)同步源碼地址此項(xiàng)目?jī)H用學(xué)習(xí)交流技術(shù)使用不做商業(yè)用途。 項(xiàng)目簡(jiǎn)介 前端站點(diǎn) 項(xiàng)目效果預(yù)覽 http://findcl.com 使用 nodejs 實(shí)現(xiàn)磁力鏈接爬蟲 磁力鏈接解析成 torrent種子信息,保存到數(shù)據(jù)...
摘要:今天我們來介紹一下基于阿里云表格存儲(chǔ),以及相關(guān)的大數(shù)據(jù)產(chǎn)品來采集與分析數(shù)據(jù)的方案。我們嘗試一種基于和阿里云其他大數(shù)據(jù)產(chǎn)品的新方案,我們先看架構(gòu)圖圖中關(guān)鍵路徑分析頁(yè)等客戶端先通過埋點(diǎn)系統(tǒng)收集數(shù)據(jù),然后通過表格存儲(chǔ)的將數(shù)據(jù)寫入的原始數(shù)據(jù)表。 摘要: 摘要 在互聯(lián)網(wǎng)高度發(fā)達(dá)的今天,ipad、手機(jī)等智能終端設(shè)備隨處可見,運(yùn)行在其中的APP、網(wǎng)站也非常多,如何采集終端數(shù)據(jù)進(jìn)行分析,提升軟件的品質(zhì)...
閱讀 1998·2021-09-07 10:24
閱讀 2097·2019-08-30 15:55
閱讀 2049·2019-08-30 15:43
閱讀 675·2019-08-29 15:25
閱讀 1064·2019-08-29 12:19
閱讀 1949·2019-08-23 18:32
閱讀 1523·2019-08-23 17:59
閱讀 954·2019-08-23 12:22