[NodeJS] ElasticSearch search 후 bulk 파일 만들기

[NodeJS] ElasticSearch search 후 bulk 파일 만들기

728x90

elasticsearch 7.x 기준

const fs = require('fs'); const es_client = require('./client'); const is_id = true const index_name = 'idx_text'; const query = { size: 100, query : { bool : { must : [ ] } } } async function run() { let rs = await es_client.search({ index: index_name, type: '_doc', body: query, scroll: '1m' }) let bulk = ''; while(rs.hits.hits.length > 0) { rs.hits.hits.map( (doc) => { if (is_id) { bulk += JSON.stringify({index: {_index: doc._index, _type: doc._type, _id: doc._id}}) + '

'; } else { bulk += JSON.stringify({index: {_index: doc._index, _type: doc._type}}) + '

'; } bulk += JSON.stringify(doc._source) + '

'; }) rs = await es_client.scroll({ scrollId: rs._scroll_id, scroll: '1m'}); } fs.writeFileSync('./_bulk/' + index_name, bulk); } run();

is_id : bulk 데이터 만들 때 조회한 데이터에서 _id를 넣을지 말지 결정

index_name : 조회할 인덱스명

query : 인덱스에서 데이터 조회할 쿼리

데이터가 많을 수도 있기 때문에 scroll 검색 방식으로 처리하게함

bulk 데이터를 모두 만들면 해당 인덱스명으로 파일을 생성.

아주 간단한 로직으로 만든거라 좀 더 응용을 해본다면,

모듈화를 시켜서 인덱스명, 쿼리를 받아서 데이터를 생성하게끔 하는 방법..?

인자값을 인덱스명, 쿼리 말고 더 넣어서 처리할 수도 있을 것 같고...

당장은 떠오르는게 이거밖에 없네..

반응형

from http://minu0807.tistory.com/114 by ccl(A) rewrite - 2021-11-24 18:00:39