จะใช้ Elasticsearch กับ MongoDB อย่างไร


152

ฉันได้ผ่านบล็อกและไซต์มากมายเกี่ยวกับการกำหนดค่า Elasticsearch สำหรับ MongoDB เพื่อจัดทำดัชนีคอลเล็กชันใน MongoDB แต่ไม่มีตรงไปตรงมา

โปรดอธิบายให้ฉันทีละขั้นตอนกระบวนการสำหรับการติดตั้ง elasticsearch ซึ่งควรรวมถึง:

  • องค์ประกอบ
  • ทำงานในเบราว์เซอร์

ฉันใช้ Node.js กับ express.js ดังนั้นโปรดช่วยด้วย


4
หมายเหตุ: แม่น้ำเลิกใช้แล้ว
abdul qayyum

คำตอบ:


287

คำตอบนี้ควรจะเพียงพอที่คุณจะได้รับการตั้งค่าให้ทำตามบทช่วยสอนนี้เกี่ยวกับการสร้างส่วนประกอบการค้นหาที่ใช้งานได้ด้วย MongoDB, Elasticsearch และ AngularJSAngularJS

หากคุณต้องการใช้การค้นหาแบบเหลี่ยมเพชรพลอยกับข้อมูลจาก API แล้วBirdWatch Repoของ Matthiasnเป็นสิ่งที่คุณอาจต้องการดู

ดังนั้นนี่คือวิธีที่คุณสามารถตั้งค่าโหนดเดียว Elasticsearch "cluster" เพื่อจัดทำดัชนี MongoDB สำหรับใช้ใน NodeJS, Express app บน EC2 Ubuntu 14.04 อินสแตนซ์ใหม่

ตรวจสอบให้แน่ใจว่าทุกอย่างทันสมัย

sudo apt-get update

ติดตั้ง NodeJS

sudo apt-get install nodejs
sudo apt-get install npm

ติดตั้ง MongoDB - ขั้นตอนเหล่านี้ตรงจากเอกสาร MongoDB เลือกเวอร์ชันที่คุณพอใจ ฉันติดกับ v2.4.9 เพราะดูเหมือนว่าเป็นรุ่นล่าสุดที่MongoDB-Riverรองรับโดยไม่มีปัญหา

นำเข้าคีย์ GPG สาธารณะ MongoDB

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

อัปเดตรายการแหล่งที่มาของคุณ

echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

รับแพ็คเกจ 10gen

sudo apt-get install mongodb-10gen

จากนั้นเลือกเวอร์ชันของคุณหากคุณไม่ต้องการเวอร์ชันล่าสุด หากคุณกำลังตั้งค่าสภาพแวดล้อมของคุณบนเครื่อง windows 7 หรือ 8 อยู่ห่างจาก v2.6 จนกว่าพวกเขาจะทำงานบั๊กบางอย่างโดยใช้มันเป็นบริการ

apt-get install mongodb-10gen=2.4.9

ป้องกันเวอร์ชันของการติดตั้ง MongoDB ของคุณจะถูกชนเมื่อคุณอัปเดต

echo "mongodb-10gen hold" | sudo dpkg --set-selections

เริ่มบริการ MongoDB

sudo service mongodb start

ไฟล์ฐานข้อมูลของคุณเริ่มต้นที่ / var / lib / mongo และไฟล์บันทึกของคุณไปที่ / var / log / mongo

สร้างฐานข้อมูลผ่าน mongo shell และดันข้อมูลจำลองเข้าไป

mongo YOUR_DATABASE_NAME
db.createCollection(YOUR_COLLECTION_NAME)
for (var i = 1; i <= 25; i++) db.YOUR_COLLECTION_NAME.insert( { x : i } )

ตอนนี้การแปลง MongoDB แบบสแตนด์อโลนเป็นชุดจำลองเป็นชุดแบบจำลอง

ก่อนปิดกระบวนการ

mongo YOUR_DATABASE_NAME
use admin
db.shutdownServer()

ตอนนี้เรากำลังเรียกใช้ MongoDB เป็นบริการดังนั้นเราจึงไม่ผ่านตัวเลือก "--replSet rs0" ในอาร์กิวเมนต์บรรทัดคำสั่งเมื่อเรารีสตาร์ทกระบวนการ mongod แต่เราวางไว้ในไฟล์ mongod.conf

vi /etc/mongod.conf

เพิ่มบรรทัดเหล่านี้ subbing สำหรับ db และพา ธ ของคุณ

replSet=rs0
dbpath=YOUR_PATH_TO_DATA/DB
logpath=YOUR_PATH_TO_LOG/MONGO.LOG

ตอนนี้เปิดเปลือก mongo อีกครั้งเพื่อเริ่มต้นชุดแบบจำลอง

mongo DATABASE_NAME
config = { "_id" : "rs0", "members" : [ { "_id" : 0, "host" : "127.0.0.1:27017" } ] }
rs.initiate(config)
rs.slaveOk() // allows read operations to run on secondary members.

ตอนนี้ติดตั้ง Elasticsearch ฉันแค่ทำตามส่วนสำคัญนี้นี้

ตรวจสอบให้แน่ใจว่าติดตั้ง Java แล้ว

sudo apt-get install openjdk-7-jre-headless -y

ติดกับ v1.1.x ตอนนี้จนกระทั่งข้อผิดพลาดปลั๊กอิน Mongo-River ได้รับการแก้ไขใน v1.2.1

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.deb
sudo dpkg -i elasticsearch-1.1.1.deb

curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
sudo mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/
sudo rm -Rf *servicewrapper*
sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install
sudo ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch

ตรวจสอบให้แน่ใจว่า /etc/elasticsearch/elasticsearch.yml เปิดใช้งานตัวเลือกการกำหนดค่าต่อไปนี้หากคุณกำลังพัฒนาบนโหนดเดียวในตอนนี้:

cluster.name: "MY_CLUSTER_NAME"
node.local: true

เริ่มบริการ Elasticsearch

sudo service elasticsearch start

ตรวจสอบว่ามันใช้งานได้

curl http://localhost:9200

หากคุณเห็นอะไรเช่นนี้แสดงว่าคุณทำได้ดี

{
  "status" : 200,
  "name" : "Chi Demon",
  "version" : {
    "number" : "1.1.2",
    "build_hash" : "e511f7b28b77c4d99175905fac65bffbf4c80cf7",
    "build_timestamp" : "2014-05-22T12:27:39Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

ตอนนี้ติดตั้งปลั๊กอิน Elasticsearch เพื่อให้สามารถเล่นกับ MongoDB

bin/plugin --install com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/1.6.0
bin/plugin --install elasticsearch/elasticsearch-mapper-attachments/1.6.0

ปลั๊กอินสองตัวนี้ไม่จำเป็น แต่ก็ดีสำหรับการทดสอบคิวรีและแสดงการเปลี่ยนแปลงดัชนีของคุณ

bin/plugin --install mobz/elasticsearch-head
bin/plugin --install lukas-vlcek/bigdesk

รีสตาร์ท Elasticsearch

sudo service elasticsearch restart

ในที่สุดก็สร้างดัชนีคอลเลกชันจาก MongoDB

curl -XPUT localhost:9200/_river/DATABASE_NAME/_meta -d '{
  "type": "mongodb",
  "mongodb": {
    "servers": [
      { "host": "127.0.0.1", "port": 27017 }
    ],
    "db": "DATABASE_NAME",
    "collection": "ACTUAL_COLLECTION_NAME",
    "options": { "secondary_read_preference": true },
    "gridfs": false
  },
  "index": {
    "name": "ARBITRARY INDEX NAME",
    "type": "ARBITRARY TYPE NAME"
  }
}'

ตรวจสอบว่าดัชนีของคุณอยู่ใน Elasticsearch

curl -XGET http://localhost:9200/_aliases

ตรวจสอบสถานะคลัสเตอร์ของคุณ

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

มันอาจเป็นสีเหลืองกับเศษที่ไม่ได้กำหนด เราต้องบอก Elasticsearch ว่าเราต้องการทำงานกับอะไร

curl -XPUT 'localhost:9200/_settings' -d '{ "index" : { "number_of_replicas" : 0 } }'

ตรวจสอบความสมบูรณ์ของคลัสเตอร์อีกครั้ง ควรเป็นสีเขียวทันที

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'

ไปเล่น.


@ Duck5auce มีแนวความคิดเกี่ยวกับวิธีรับผลลัพธ์ (ผลการค้นหาแบบยืดหยุ่น) โดย express.js และแสดงในเบราว์เซอร์โดยใช้แม่แบบ Jade หรือ ejs เช่น app.get ('search = "google"', function (req , res) {}); และขอขอบคุณสำหรับคำตอบที่ยอดเยี่ยม
bibin david

@bibindavid ฉันต้องการตรวจสอบทรัพยากรนี้ มันจะนำคุณไปสู่การสร้างโมดูลไคลเอนต์ ES ฝั่งเซิร์ฟเวอร์คุณส่งข้อความค้นหาที่กรองแล้วผ่านโมดูลที่กำหนดเองอีกสองโมดูล การแสดงข้อมูลยังคงจัดการกับลูกค้า แต่ควรเป็นจุดเริ่มต้นที่ดี sahan.me/posts/dabbling-in-elasticsearch-part-2-with-nodejs Github repo ตั้งอยู่ที่นี่: github.com/sahan/sahan.github.io/tree/master/resources/ …
Donald Gary

คุณช่วยบอกฉันหน่อยได้ไหมว่า mongoosastic จะดีกว่าหรือใช้ mongose ​​และ elasticsearch module แตกต่างกันอย่างไร ????
Sudhanshu Gaur

7
เป็นเวลาหนึ่งปีแล้วตั้งแต่คำตอบที่ยอดเยี่ยมของ duck5auce คิดว่าผู้คนใช้ 10gens [เชื่อมต่อ mongo] [1] เพื่อซิงโครไนซ์คลัสเตอร์ MongoDB กับ ElasticSearch แบบเรียลไทม์ มันตัด oplog MongoDB [1]: github.com/10gen-labs/mongo-connector/wiki/ …
Andrew Betts

8
@ duck5auce โปรดอัปเดตคำตอบนี้ล้าสมัยแล้ว แม่น้ำเลิกใช้แล้ว
tsturzl

35

การใช้แม่น้ำสามารถนำเสนอปัญหาเมื่อปฏิบัติการของคุณเพิ่มขึ้น River จะใช้หน่วยความจำจำนวนมากเมื่อทำงานหนัก ฉันขอแนะนำให้ใช้แบบจำลองการค้นหาแบบยืดหยุ่นของคุณเองหรือถ้าคุณใช้พังพอนคุณสามารถสร้างแบบจำลองการค้นหาแบบพลาสติกของคุณลงในแบบนั้นหรือใช้แบบการค้นดูทางวิทยาศาสตร์ซึ่งเป็นสิ่งสำคัญสำหรับคุณ

ข้อเสียอีกประการหนึ่งของแม่น้ำ Mongodb คือคุณจะติดอยู่กับสาขา Mongodb 2.4.x และ ElasticSearch 0.90.x คุณจะเริ่มพบว่าคุณขาดคุณสมบัติที่ยอดเยี่ยมมากมายและโครงการ mongodb River ก็ไม่ได้ผลิตผลิตภัณฑ์ที่ใช้งานได้เร็วพอที่จะรักษาเสถียรภาพ ที่กล่าวว่าแม่น้ำ Mongodb ไม่ใช่สิ่งที่ฉันจะผลิตด้วย มันถูกวางปัญหามากกว่าค่าของมัน มันจะสุ่มวางการเขียนภายใต้ภาระหนักมันจะใช้หน่วยความจำมากมายและไม่มีการตั้งค่าให้ปิดกั้น นอกจากนี้แม่น้ำไม่ได้อัปเดตตามเวลาจริงมันอ่าน oplogs จาก mongodb และสิ่งนี้สามารถชะลอการอัปเดตได้นานถึง 5 นาทีในประสบการณ์ของฉัน

เมื่อเร็ว ๆ นี้เราต้องเขียนส่วนใหญ่ของโครงการของเราเพราะมันเกิดขึ้นทุกสัปดาห์ว่ามีบางอย่างผิดปกติกับ ElasticSearch เราไปไกลถึงการจ้างที่ปรึกษา Dev Ops ซึ่งก็เห็นด้วยว่าการที่ดีที่สุดที่จะย้ายออกจากแม่น้ำ

UPDATE: ตอนนี้ Elasticsearch-mongodb-river รองรับ ES v1.4.0 และ mongodb v2.6.x อย่างไรก็ตามคุณอาจยังพบปัญหาเกี่ยวกับประสิทธิภาพการทำงานของการแทรก / อัปเดตจำนวนมากเนื่องจากปลั๊กอินนี้จะพยายามอ่าน oplogs ของ mongodb เพื่อซิงค์ หากมีการดำเนินการมากมายตั้งแต่การล็อก (หรือสลักค่อนข้าง) ปลดล็อคคุณจะสังเกตเห็นการใช้หน่วยความจำสูงมากบนเซิร์ฟเวอร์ elasticsearch ของคุณ หากคุณวางแผนที่จะมีกิจการขนาดใหญ่แม่น้ำไม่ใช่ตัวเลือกที่ดี นักพัฒนาของ ElasticSearch ยังคงแนะนำให้คุณจัดการดัชนีของคุณเองโดยการสื่อสารโดยตรงกับ API ของพวกเขาโดยใช้ห้องสมุดลูกค้าสำหรับภาษาของคุณแทนที่จะใช้แม่น้ำ นี่ไม่ใช่จุดประสงค์ของแม่น้ำ Twitter-river เป็นตัวอย่างที่ดีของการใช้แม่น้ำ เป็นหลักเป็นวิธีที่ดีในการแหล่งข้อมูลจากแหล่งภายนอก

ยังพิจารณาว่า mongodb-river ตกหลุมหลังในเวอร์ชันเนื่องจากไม่ได้รับการดูแลรักษาโดยองค์กร ElasticSearch ซึ่งได้รับการดูแลโดยบุคคลที่สาม การพัฒนาติดอยู่ที่ v0.90 สาขาเป็นเวลานานหลังจากการปล่อย v1.0 และเมื่อเวอร์ชัน v1.0 ถูกปล่อยออกมามันก็ไม่เสถียรจนกว่า elasticsearch จะปล่อย v1.3.0 รุ่น Mongodb ก็ตกอยู่เบื้องหลัง คุณอาจพบว่าตัวเองแน่นเมื่อคุณต้องการที่จะย้ายไปยังรุ่นที่ใหม่กว่าโดยเฉพาะกับ ElasticSearch ภายใต้การพัฒนาที่หนักหน่วงเช่นนี้พร้อมกับคุณสมบัติที่คาดหวังไว้มากมาย การติดตาม ElasticSearch ล่าสุดมีความสำคัญมากเนื่องจากเราพึ่งพาอย่างหนักในการปรับปรุงฟังก์ชันการค้นหาของเราอย่างต่อเนื่องซึ่งเป็นส่วนสำคัญของผลิตภัณฑ์ของเรา

โดยสรุปคุณอาจจะได้ผลิตภัณฑ์ที่ดีกว่าถ้าคุณทำด้วยตัวเอง มันไม่ยากเลย เป็นเพียงอีกฐานข้อมูลหนึ่งในการจัดการรหัสของคุณและสามารถนำไปใช้กับโมเดลที่คุณมีอยู่ได้อย่างง่ายดาย


คุณมีลิงค์หรือคำแนะนำที่ฉันสามารถจัดทำดัชนีคือข้อมูลผู้เขียนในดัชนีการเผยแพร่หรือไม่เนื่องจากสิ่งพิมพ์และผู้แต่งอยู่ใน 2 คอลเลกชันและลิงค์ผ่านการอ้างอิงและการอ้างอิงหลายรายการ
Marcel Djaman

อ่านบางพื้นหลังelastic.co/guide/en/elasticsearch/guide/current/relations.html
tsturzl

นี้จะอธิบายวิธีการที่คุณเข้าร่วม / เกี่ยวข้องข้อมูลelastic.co/guide/en/elasticsearch/guide/current/...
tsturzl

1
Elasticsearch เป็นฐานข้อมูลการจัดเก็บเอกสารมากกว่าเชิงสัมพันธ์ มันเป็นไปไม่ได้ที่จะเชื่อมโยงข้อมูลใน ElasticSearch แต่การเกิดความผิดปกติมีแนวโน้มที่จะเกิดขึ้น แต่สามารถจัดการได้ด้วยตรรกะเพิ่มเติม (มีปลั๊กอิน) วิธีที่พบได้บ่อยที่สุดในการเชื่อมโยงข้อมูลดังเช่นสถานะในลิงก์ด้านบนคือการจัดเก็บการอ้างอิง ID ในเอกสารที่เกี่ยวข้อง ตรวจสอบให้แน่ใจว่าคุณเก็บ ID นี้ในเขตข้อมูลที่ตั้งค่าไว้not_analyzedไม่เช่นนั้นคุณจะมีปัญหาในการสืบค้นให้ทำตามวิธีที่เขตข้อมูลวิเคราะห์รับโทเค็น
tsturzl

4

ฉันพบว่า mongo-connector มีประโยชน์ มันเป็นรูปแบบ Mongo Labs (MongoDB Inc. ) และสามารถใช้ได้กับ Elasticsearch 2.x

เครื่องมือจัดการเอกสารยืดหยุ่น 2.x: https://github.com/mongodb-labs/elastic2-doc-manager

mongo-connector สร้างไปป์ไลน์จากคลัสเตอร์ MongoDB ไปยังระบบเป้าหมายตั้งแต่หนึ่งระบบขึ้นไปเช่น Solr, Elasticsearch หรือคลัสเตอร์ MongoDB อื่น มันซิงโครไนซ์ข้อมูลใน MongoDB กับเป้าหมายจากนั้นทำตามคำสั่ง MongoDB ให้สอดคล้องกับการทำงานใน MongoDB แบบเรียลไทม์ มันได้รับการทดสอบกับ Python 2.6, 2.7 และ 3.3+ เอกสารรายละเอียดมีอยู่ในวิกิ

https://github.com/mongodb-labs/mongo-connector https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch


4

River เป็นโซลูชันที่ดีเมื่อคุณต้องการซิงโครไนซ์เรียลไทม์และโซลูชั่นทั่วไป

หากคุณมีข้อมูลใน MongoDB อยู่แล้วและต้องการจัดส่งไปยัง Elasticsearch อย่างง่ายดายเช่น "one-shot" คุณสามารถลองใช้แพ็คเกจของฉันใน Node.js https://github.com/itemsapi/elasticbulk https://github.com/itemsapi/elasticbulk

มันใช้สตรีม Node.js เพื่อให้คุณสามารถนำเข้าข้อมูลจากทุกสิ่งที่รองรับสตรีม (เช่น MongoDB, PostgreSQL, MySQL, ไฟล์ JSON เป็นต้น)

ตัวอย่างสำหรับ MongoDB ถึง Elasticsearch:

ติดตั้งแพ็คเกจ:

npm install elasticbulk
npm install mongoose
npm install bluebird

สร้างสคริปต์เช่น script.js:

const elasticbulk = require('elasticbulk');
const mongoose = require('mongoose');
const Promise = require('bluebird');
mongoose.connect('mongodb://localhost/your_database_name', {
  useMongoClient: true
});

mongoose.Promise = Promise;

var Page = mongoose.model('Page', new mongoose.Schema({
  title: String,
  categories: Array
}), 'your_collection_name');

// stream query 
var stream = Page.find({
}, {title: 1, _id: 0, categories: 1}).limit(1500000).skip(0).batchSize(500).stream();

elasticbulk.import(stream, {
  index: 'my_index_name',
  type: 'my_type_name',
  host: 'localhost:9200',
})
.then(function(res) {
  console.log('Importing finished');
})

จัดส่งข้อมูลของคุณ:

node script.js

มันไม่เร็วมากนัก แต่ทำงานได้กับบันทึกนับล้านรายการ (ขอบคุณสตรีม)


3

ที่นี่วิธีการทำเช่นนี้ใน mongodb 3.0 ฉันใช้บล็อกที่ดีนี้

  1. ติดตั้ง mongodb
  2. สร้างไดเรกทอรีข้อมูล:
$ mkdir RANDOM_PATH/node1
$ mkdir RANDOM_PATH/node2> 
$ mkdir RANDOM_PATH/node3
  1. เริ่มอินสแตนซ์ Mongod
$ mongod --replSet test --port 27021 --dbpath node1
$ mongod --replSet test --port 27022 --dbpath node2
$ mongod --replSet test --port 27023 --dbpath node3
  1. กำหนดค่าชุดจำลอง:
$ mongo
config = {_id: 'test', members: [ {_id: 0, host: 'localhost:27021'}, {_id: 1, host: 'localhost:27022'}]};    
rs.initiate(config);
  1. การติดตั้ง Elasticsearch:
a. Download and unzip the [latest Elasticsearch][2] distribution

b. Run bin/elasticsearch to start the es server.

c. Run curl -XGET http://localhost:9200/ to confirm it is working.
  1. การติดตั้งและกำหนดค่าแม่น้ำ MongoDB:

$ bin / plugin - ติดตั้ง com.github.richardwilly98.elasticsearch / elasticsearch-river-mongodb

$ bin / plugin - ติดตั้ง elasticsearch / elasticsearch-mapper-Attachments

  1. สร้าง“ แม่น้ำ” และดัชนี:

curl -XPUT ' http: // localhost: 8080 / _river / mongodb / _meta ' -d '{"type": "mongodb", "mongodb": {"db": "mydb", "คอลเลกชัน": "foo" }, "index": {"name": "name", "type": "random"}} '

  1. ทดสอบบนเบราว์เซอร์:

    http: // localhost: 9200 / _search q = บ้าน


6
ElasticSearch มีปลั๊กอินของแม่น้ำที่เลิกใช้แล้ว นี่ไม่ใช่วิธีที่ดีที่สุดในการรักษาดัชนีการค้นหา
tsturzl

3

ที่นี่ฉันพบตัวเลือกที่ดีอีกวิธีหนึ่งในการโยกย้ายข้อมูล MongoDB ของคุณไปยัง Elasticsearch ภูต go ที่ซิงค์ mongodb กับ elasticsearch แบบเรียลไทม์ มันคือ Monstache มันสามารถดูได้ที่: Monstache

ด้านล่าง setp เริ่มต้นเพื่อกำหนดค่าและใช้งาน

ขั้นตอนที่ 1:

C:\Program Files\MongoDB\Server\4.0\bin>mongod --smallfiles --oplogSize 50 --replSet test

ขั้นตอนที่ 2 :

C:\Program Files\MongoDB\Server\4.0\bin>mongo

C:\Program Files\MongoDB\Server\4.0\bin>mongo
MongoDB shell version v4.0.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.2
Server has startup warnings:
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten]
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten]
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2019-01-18T16:56:44.931+0530 I CONTROL  [initandlisten]
MongoDB Enterprise test:PRIMARY>

ขั้นตอนที่ 3: ตรวจสอบการจำลองแบบ

MongoDB Enterprise test:PRIMARY> rs.status();
{
        "set" : "test",
        "date" : ISODate("2019-01-18T11:39:00.380Z"),
        "myState" : 1,
        "term" : NumberLong(2),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1547811537, 1),
                        "t" : NumberLong(2)
                },
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1547811537, 1),
                        "t" : NumberLong(2)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1547811537, 1),
                        "t" : NumberLong(2)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1547811537, 1),
                        "t" : NumberLong(2)
                }
        },
        "lastStableCheckpointTimestamp" : Timestamp(1547811517, 1),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "localhost:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 736,
                        "optime" : {
                                "ts" : Timestamp(1547811537, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDate" : ISODate("2019-01-18T11:38:57Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1547810805, 1),
                        "electionDate" : ISODate("2019-01-18T11:26:45Z"),
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1547811537, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1547811537, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
MongoDB Enterprise test:PRIMARY>

ขั้นตอน 4. ดาวน์โหลด " https://github.com/rwynn/monstache/releases " เปิดเครื่องรูดดาวน์โหลดและปรับตัวแปร PATH ของคุณเพื่อรวมเส้นทางไปยังโฟลเดอร์สำหรับแพลตฟอร์มของคุณ ไปที่ cmd และพิมพ์"monstache -v" # 4.13.1 Monstache ใช้รูปแบบ TOML สำหรับการกำหนดค่า กำหนดค่าไฟล์สำหรับการย้ายข้อมูลชื่อ config.toml

ขั้นตอนที่ 5

My config.toml ->

mongo-url = "mongodb://127.0.0.1:27017/?replicaSet=test"
elasticsearch-urls = ["http://localhost:9200"]

direct-read-namespaces = [ "admin.users" ]

gzip = true
stats = true
index-stats = true

elasticsearch-max-conns = 4
elasticsearch-max-seconds = 5
elasticsearch-max-bytes = 8000000 

dropped-collections = false
dropped-databases = false

resume = true
resume-write-unsafe = true
resume-name = "default"
index-files = false
file-highlighting = false
verbose = true
exit-after-direct-reads = false

index-as-update=true
index-oplog-time=true

ขั้นตอนที่ 6

D:\15-1-19>monstache -f config.toml

Monstache กำลังทำงาน ...

ยืนยันข้อมูลย้ายถิ่นที่ Elasticsearch

เพิ่มบันทึกที่ Mongo

Monstache บันทึกเหตุการณ์และย้ายข้อมูลไปยัง ElasticSearch


3

เนื่องจากตัวเชื่อมต่อ mongo ปรากฏว่าตาย บริษัท ของฉันจึงตัดสินใจสร้างเครื่องมือสำหรับการใช้ Mongo change stream เพื่อส่งออกไปยัง Elasticsearch

ผลลัพธ์เบื้องต้นของเราดูสดใส คุณสามารถตรวจสอบได้ที่https://github.com/electionsexperts/mongo-stream เรายังอยู่ในช่วงต้นของการพัฒนาและยินดีรับข้อเสนอแนะหรือการมีส่วนร่วม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.