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}}) + '\n';
} else {
bulk += JSON.stringify({index: {_index: doc._index, _type: doc._type}}) + '\n';
}
bulk += JSON.stringify(doc._source) + '\n';
})
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 데이터를 모두 만들면 해당 인덱스명으로 파일을 생성.
아주 간단한 로직으로 만든거라 좀 더 응용을 해본다면,
모듈화를 시켜서 인덱스명, 쿼리를 받아서 데이터를 생성하게끔 하는 방법..?
인자값을 인덱스명, 쿼리 말고 더 넣어서 처리할 수도 있을 것 같고...
당장은 떠오르는게 이거밖에 없네..
https://github.com/smw0807/minu_1/blob/master/node/es_functions/run_make_bulk.js
반응형
'Node.js' 카테고리의 다른 글
[NodeJS] ElasticSearch API getTemplate(index_template) (0) | 2022.01.03 |
---|---|
[NodeJS] bulk 데이터 파일 읽어서 ElasticSearch에 등록하기 (2) | 2021.11.25 |
[NodeJS] ElasticSearch bulk (0) | 2021.11.23 |
[NodeJS] Multer를 이용해 파일 ElasticSearch에 등록하기 (1) | 2021.11.20 |
[NodeJS] child_process exec 한글 깨짐 해결하기 (0) | 2021.08.18 |