Node.js

[Node] node로 ElasticSearch에 데이터 bulk로 넣기

SongMinu 2019. 11. 20. 15:27
728x90

require 한 것들 elasticsearch, readline, fs

var elasticsearch = require('elasticsearch');
var rl = require('readline');
var fs = require('fs');

var conf = require('./conf');

var client = new elasticsearch.Client({
	hosts: ["https://" + conf.els_id + ":" + conf.els_pw + "@" + conf.els_ip + ":" + conf.els_port]
});

var r = rl.createInterface({
	input: process.stdin,
    output: process.stdout
});

r.question("Input File Name : ", function (answer) {
	var input = answer.split(" ");
    var data = fs.readFileSync("./bulk_data/" + input, 'utf8') //bulk할 데이터가 들어있는 파일명
    var bulkarr = [];
    bulkarr.push(data);
    
    await addDocumnet(bulkarr);
    r.close();
});

async function addDocument (d) {
	try {
		const rs = await client.bulk({
			body:d
		})
		console.log(rs);
	} catch (err) {
		console.error('addDocument Error : ', err);
	}
};

 

파일 구조

project

 - bulk_data

 -- data1

 - conf.js

 - add_bulk.js

 

방식

node add_bulk.js 입력시

Input File Name :    <-이게 출력

bulk_data 디렉터리 안에 벌크 할 데이터가 들어있는 파일명을 입력

해당 파일 안에 있는 데이터를 bulkarr에 푸쉬 후 벌크를 시키는 함수한테 전달해서 처리함

 

단, 주의할 점은 bulk할 데이터가 지나치게 너무 많을 경우 이 소스로는 제대로 처리 못하는 상황이 발생할 수 있음

너무 많으면 일정량씩 끊어서 처리하게끔 소스를 짜야함

 

 

https://github.com/smw0807/minu_1/tree/master/node/add_data

 

반응형