본문 바로가기

Elasticsearch

[Elasticsearch] bulk insert (index, create), update, delete with node.js

반응형

 

 

 

Elasticsearch Bulk with Node.js 

 

 

이번 bulk코드를 작성해보면서 느낀게 엘라스틱서치는 뭔가 정보가 많지 않은 (?) 느낌이다.(공식 문서는 있지만,,,) node.js, JS, TS, mongoDB 등 자료가 되게 많은 거였구나~ 생각이 들었다.

그래서 정리해본 Node.js + Elasticsearch + Bulk

 

I feel like there isn't much information about Elasticsearch on Google unlike JS, TS, mongoDB etc. So I decided to record what I tried.  

 

BEFORE THAT, 

먼저 clinet 연결을 해둔다. first, connect to the client. 

const client = new Client({
    node: 'http://localhost:9200',
})

 

bulk operation 

const ESBulkResult = await client.bulk({
    index: 'bulk_test',  // 모두 동일한 인덱스일 경우, if the index all the doc points to is the same
    refresh: true,
    operations: [
        // BULK INDEX
        {  // here set _id and _type
            'index':
                {
                    // '_index': 'test', // 각기 다른 인덱스라면 개별적으로 적어준다. if the index differ, write individually
                    '_type': '_doc',
                    '_id': 1
                }
        },
        {  // document to index
            field1: 'one',
            field2: 'two',
            field3: 'three'
        },

        // BULK CREATE
        { // here set _id and _type
            'create':
                {
                    // '_index': 'test',
                    '_type': '_doc',
                    '_id': 2
                }
        },
        { // document to create
            field1: 'hi1',
            field2: 'hi2',
            field3: 'hi3'
        },

        // BULK UPDATE
        { // here filter
            'update': {
                // '_index': 'test',
                '_type': '_doc',
                '_id': 22
            }
        },
        { // document to update
            'doc': {
                field1: 'update1',
                field2: 'update2',
                field3: 'update3'
            }
        },

        // BULK DELETE
        { // filter
            'delete': {
                // '_index: 'test',
                '_type': '_doc',
                '_id': 22
            }
        }
    ],
})

 

나는 모든  bulk 도큐먼트들이 모두 같은 index를 바라보고 있어서 가장 위 레벨에 한번만 적고 개별적인 도큐먼트 안에의 _index 는 사용하지 않았다. 

다른 Bulk 들과는 다르게 index, create, update는 {} 두 개의 객체가 연이어 나와야 한다! 처음 코드를 봤을 땐 매우 헷갈렸다. delete는 하나의 객체로만 이루어져 있다. 

index와 create는 보면 똑같은 코드로 이루어져 있는데 사실 실행되는 것도 똑같다. 차이점은 아래와 같다. 

 

Since all the documents point to the same index so I just wrote _index at the top level of bulk and deleted the ones in individual docs. Index, create, update need two consecutive objects, the first object is showing whcin index, which type (now type is not used) etc. and the second one has the document to be created, updated. Delete needs only one object which is like a filter. 

 

index vs create

 index  : 해당 인덱스 안에 똑같은 도큐먼트가 있든 없든 관계없이 무조건 입력이 된다. (suceed) 

존재하지 않으면 입력하고, 존재한다면 대체한다. (하지만 propery 몇 개를 수정한다면 update를 쓰는 것이 낫다.) 

index API는 scripted updates를 지원하지 않아서 scripts를 사용하고 싶다면 update를 써야 한다. 

 

ES will create a document even though the index has the same document, it won't throw an error. but it will replace the existing one. 

 

 create  : 해당 인덱스 안에 새로 넣으려하는 도큐먼트가 반드시 없어야 성공한다. 만약 똑같은 도큐먼트가 존재하면 에러를 낸다. (error)

 

You must ensure that the document  doesn't exist yet in your index otherwise the call will fail. 

 

결론 : 어떤 걸 쓰더라도 상관없다. 단지 같은 도큐먼트의 존재여부에 따라 성공/실패가 있다는 점을 제외하고는 큰 불이익? 차이? 는 없다고 한다. 

 

There isn't any disadvantage, but some people prefer using "index" because the call will always succeed. 

 

 

 

 

 

Elasticsearch 다운 설치 방법 

https://blckchainetc.tistory.com/378

 

[elasticsearch, kibana] homebrew로 설치하기 on mac 맥북

Elasticsearch / kibana homebrew를 사용해서 설치하기 (맥북) elasticsearch 설치 전, JDK 설치 / java_home 환경변수 설정이 필요하다. 1. JDK 설치 https://blckchainetc.tistory.com/376 JAVA JDK mac m1에 설..

blckchainetc.tistory.com

 

Elasticsearch + Node.js insert update delete 방법 

https://blckchainetc.tistory.com/384

 

[Elasticsearch + Node.js] index 생성 삭제 조회 bulk CRUD with TypeScript

Elasticsearch + Node.js + Typescript로 elasticsearch 실습하기 @elastic/elasticsearch version : 8.1.0 typescript version : 4.6.3 1. 새 프로젝트 환경 설정 https://blckchainetc.tistory.com/381 [TypeSc..

blckchainetc.tistory.com

반응형