分布式搜尋elasticsearch java API 之(七)——與MongoDB同步資料

來源:互聯網
上載者:User

      elasticsearch提供river這個模組來讀取資料來源中的資料到es中,es官方有提供couchDB的同步外掛程式,因為項目用到的是mongodb,所以在找mongodb方面的同步外掛程式,在git上找到了elasticsearch-river-mongodb。

       這個外掛程式最初是由aparo寫的,最開始的功能就是讀取mongodb裡面的表,記錄最後一條資料的id,根據時間間隔不斷訪問mongodb,看看有沒有大於之前記錄的id的資料,有的話就索引資料,這種做法的缺點就是只能同步最新的資料,修改或刪除的就不能同步。後來又由richardwilly98等人修改成通過讀取mongodb的oplog來同步資料。因為mongodb是通過oplog這個表來使叢集中的不同機器資料同步的,這樣做的話可以保證es裡面的資料和mongodb裡面的是一樣的,因為mongodb中的資料一有改變,都會通過oplog反映到monogodb中。他們還添加了個索引mongodb
gridfs裡檔案的功能,非常好。

        但他們修改完後的外掛程式還是有些不滿意的地方。他把local庫(放oplog的)和普通庫的訪問密碼都設定成同一個,如果local庫和普通庫的使用者名稱和密碼不同那這個外掛程式就不能用了。還有一個就是同步時會把mongodb的表中所有的欄位都同步過去,但是有些欄位我們並不想把它放到索引中,於是對這個外掛程式再作修改,把local庫和普通庫的鑒權分開,添加可選欄位功能。

 

運行環境:Elasticsearch 0.19.X
                  叢集環境下的MongoDB 2.X
注意:該外掛程式只支援叢集環境下的mongodb,因為叢集環境下的mongodb才有oplog這個表。

安裝方法:
安裝elasticsearch-mapper-attachments外掛程式(用於索引gridfs裡的檔案)
%ES_HOME%\bin\plugin.bat -install elasticsearch/elasticsearch-mapper-attachments/1.4.0

安裝elasticsearch-river-mongodb(同步外掛程式)
%ES_HOME%\bin\plugin.bat -install laigood/elasticsearch-river-mongodb/laigoodv1.0.0

 

建立river方法:

curl方式:

$ curl -XPUT "localhost:9200/_river/mongodb/_meta" -d '{  type: "mongodb",  mongodb: {     db: "test",     host: "localhost",     port: "27017",     collection: "testdb",    fields:"title,content",    gridfs: "true",    local_db_user: "admin",    local_db_password:"admin",    db_user: "user",    db_password:"password"  },   index: {     name: "test",     type: "type",    bulk_size: "1000",     bulk_timeout: "30"  }}

db為同步的資料庫名,
host mongodb的ip地址(預設為localhost),
port mongodb的連接埠,
collection 要同步的表名
fields 要同步的欄位名(用逗號隔開,預設全部)
gridfs 是否是gridfs檔案(如果collection是gridfs的話就設定成true)
local_db_user local資料庫的使用者名稱(沒有的話不用寫)
local_db_password local資料庫的密碼(沒有的話不用寫)
db_user 要同步的資料庫的密碼(沒有的話不用寫)
db_password 要同步的資料庫的密碼(沒有的話不用寫)
name 索引名(不能之前存在)
type 類型
bulk_size 大量新增的最大數
bulk_timeout 大量新增的逾時時間

java api方式:

client.prepareIndex("_river", "testriver", "_meta")    .setSource(    jsonBuilder().startObject()    .field("type", "mongodb")    .startObject("mongodb")    .field("host","localhost")    .field("port",27017)    .field("db","testdb")    .field("collection","test")    .field("fields","title,content")    .field("db_user","user")              .field("db_password","password")    .field("local_db_user","admin")          .field("local_db_password","admin")    .endObject()             .startObject("index")     .field("name","test")     .field("type","test")     .field("bulk_size","1000")     .field("bulk_timeout","30")     .endObject()     .endObject()    ).execute().actionGet();

 

本外掛程式git地址:https://github.com/laigood/elasticsearch-river-mongodb

本文地址:http://blog.csdn.net/laigood12345/article/details/7691068

參考資料:http://www.searchtech.pro/articles/2013/02/18/1361191176552.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.