摘要:一前言因公司需要選用做全文檢索,持久化存儲選用的是,但是希望里面的數據發生改變可以實時同步到上,一開始主要使用的版本,可以搞定這個問題。或者修改中的某一條數據,也會實時同步到中。如何把的主文檔和附件信息都同步到中利用的來實現。
一、前言
因公司需要選用elasticsearch做全文檢索,持久化存儲選用的是mongodb,但是希望mongodb里面的數據發生改變可以實時同步到elasticsearch上,一開始主要使用elasticsearch v1.7.2的版本,mongo-river可以搞定這個問題。隨著elasticsearch的升級,發現elasticsearch已經放棄了mongo-river,咋整......Google之后發現一神器mongo-connector,國外大神用python寫的工具而且MongoDB官網也極力推薦使用。But,我們需要把文檔中的附件信息也同步到elasticsearch上,mongo-connector對附件同步支持的不是很好。能不能有個nodejs版本的數據同步?GitHub上發現一個大神寫的node-elasticsearch-sync很好用,但是功能太簡單了,不支持復雜的數據篩選,也不支持附件同步。活人不能被尿憋死,參考node-elasticsearch-sync自己寫了一個同步工具node-mongodb-es-connector。
二、準備工作2.1 安裝mongodb
安裝mongodb可以去官網下載:
https://www.mongodb.com/
PS:關于如何搭建mongodb replica集群:
https://www.cnblogs.com/ljhdo...
2.2 安裝elasticsearch
安裝elasticsearch可以去官網下載:
https://www.elastic.co/cn/dow...
PS:關于elasticsearch-head、kibana、logstash等相關安裝請自己google吧
2.3 安裝nodejs
安裝nodejs可以去官網下載:
http://nodejs.cn/
PS:別忘記安裝npm,如何安裝請自己google吧
以上是使用node-mongodb-es-connector的前提
2.4 node-mongodb-es-connector下載地址
github: https://github.com/zhr8521007...
npm: https://www.npmjs.com/package...
三、文件結構├── crawlerDataConfig 項目構建配置(這里添加你要同步數據的配置) │ ├── mycarts.json 一個index一個配置文件(唯一需要自己增加或者修改的配置文件,這個文件只是提供了一個例子,不用可以刪除) │ └── …… ├── lib │ ├── pool │ │ ├── elasticsearchPool.js elasticsearch連接池 │ │ ├── mongoDBPool.js mongodb連接池 │ ├── promise │ │ ├── elasticsearchPromise.js elasticsearch方法類(增刪改查) │ │ ├── mongoPromise.js mongodb方法類(增刪改查) │ ├── util │ │ ├── fsWatcher.js 配置文件監控類(主要監控crawlerDataConfig目錄里面的配置文件) │ │ ├── logger.js 日志類 │ │ ├── oplogFactory.js mongo-oplog觸發事件之后的執行方法(增刪改) │ │ ├── tail.js 監聽mongodb數據是否發生變化 │ │ ├── util.js 工具類 │ ├── main.js 主方法(主要是第一次啟動立刻同步mongodb里面的數據到elasticsearch) ├── logs │ ├── logger-2018-03-23.log 同步數據打印日志 │ └── …… ├── test │ ├── img │ │ ├── elasticsearch.jpg 圖片不解釋 │ │ ├── mongoDB.jpg 圖片不解釋 │ │ └── structure.jpg 圖片不解釋 │ └── test.js 測試類(啥也沒寫) ├── app.js 啟動文件 ├── index.js 接口文件(只提供配置文件的增刪改) ├── package-lock.json ├── package.json ├── ReadMe.md 英文文檔(markdown) ├── README.zh-CN.md 中文文檔(markdown) └── LICENSE
mycarts.json文件(這個文件只是提供了一個例子)
{ "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里需要監聽的數據庫.
m_collectionname - MongoDB里需要監聽的collection.
m_filterfilds - MongoDB里的查詢條件,目前支持一些簡單的查詢條件.(默認值為null)
m_returnfilds - MongoDB需要返回的字段.(默認值為null)
m_connection
m_servers - MongoDB服務器的地址.(replica結構,數組格式)
m_authentication - 如果需要MongoDB的登錄驗證使用下面配置(默認值為null).
- username - MongoDB連接的用戶名. - password - MongoDB連接的密碼. - authsource - MongoDB用戶認證,默認為admin. - replicaset - MongoDB的replica結構的名字. - ssl- MongoDB的ssl.(默認值為false).
m_documentsinbatch - 一次性從mongodb往Elasticsearch里傳入數據的條數.
(你可以設置比較大的值,默認為1000.).
m_delaytime - 每次進elasticsearch數據的間隔時間(默認值為1000ms).
e_index - ElasticSearch里的index.
e_type - ElasticSearch里的type,這里的type主要為了使用bulk.
e_connection
e_server - ElasticSearch的連接字符串.
e_httpauth - 如果ElasticSearch需要登錄驗證使用下面配置(默認值為null).
username - ElasticSearch連接的用戶名.
password - ElasticSearch連接的密碼.
e_pipeline - ElasticSearch 中pipeline的名稱.(沒有pipeline就填null)
e_iscontainattachment - pipeline是否包含附件規則(默認值為false).
四、如何使用用戶可以事先在/crawlerDataConfig目錄下編輯好自己的配置文件,文件必須以json格式存放.
在文件根目錄下,打開cmd命令窗口,輸入以下信息:
node app.js
項目啟動后,修改配置文件 (如:mycarts.json),數據也會實時同步。或者修改mongodb中的某一條數據,也會實時同步到elasticsearch中。
PS:如何把mongodb的主文檔和附件信息都同步到elasticsearch中?
利用elasticsearch的pipeline來實現。
首先需要創建一個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)修改節點數據即可
"e_pipeline": "mypipeline"五、結果展示
mongodb里面的數據
elasticsearch里面的數據
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19241.html
摘要:項目簡介前端站點項目效果預覽使用實現磁力鏈接爬蟲磁力鏈接解析成種子信息,保存到數據庫,利用實現中文檢索。搭建磁力鏈接搜索引擎源碼地址后端腳本磁力鏈接獲取磁力鏈接解析入庫定時同步源碼地址此項目僅用學習交流技術使用不做商業用途。 項目簡介 前端站點 項目效果預覽 http://findcl.com 使用 nodejs 實現磁力鏈接爬蟲 磁力鏈接解析成 torrent種子信息,保存到數據...
摘要:今天我們來介紹一下基于阿里云表格存儲,以及相關的大數據產品來采集與分析數據的方案。我們嘗試一種基于和阿里云其他大數據產品的新方案,我們先看架構圖圖中關鍵路徑分析頁等客戶端先通過埋點系統收集數據,然后通過表格存儲的將數據寫入的原始數據表。 摘要: 摘要 在互聯網高度發達的今天,ipad、手機等智能終端設備隨處可見,運行在其中的APP、網站也非常多,如何采集終端數據進行分析,提升軟件的品質...
閱讀 1951·2021-09-07 10:24
閱讀 2087·2019-08-30 15:55
閱讀 2038·2019-08-30 15:43
閱讀 671·2019-08-29 15:25
閱讀 1046·2019-08-29 12:19
閱讀 1927·2019-08-23 18:32
閱讀 1515·2019-08-23 17:59
閱讀 947·2019-08-23 12:22