본문 바로가기

Elasticsearch

Elasticsearch + spirng boot 연동(UPDATE)

특정 데이터 필드 값을 UPDATE 해서 변경해보려고한다.

 

DocumentApi.java : _bulkDocumentWithBulkProcessor 메소드

else if(data.getActionType().equals(BulkData.Type.UPDATE)){
    bulkProcessor.add(new UpdateRequest(data.getIndexName(), data.getId()).doc(data.getJsonMap()));
}

 

위의 코드를 추가한다.

BULK API를 사용하여 ES에 여러 개의 문서를 한 번에 UPDATE 한다.

UPDATE할 문서의 ID와 변경할 내용을 UpdateRequest 를 통해 지정하여 ES에 전달한다.

 

 

IndexApi.java

    /**
     * 인덱스 존재여부 확인
     * @param indexName
     * @return
     */
    public Boolean existIndex(String indexName) {
        boolean acknowledged = false;

        try {
            GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
            acknowledged = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return acknowledged;
    }

 

위의 코드는 주어진 인덱스가 ES 클러스터에 존재하는지 확인하는 메소드이다.

GetIndexRequest 를 사용하여 주어진 인덱스의 존재 여부를 확인한다.

client.indices().exists(getIndexRequest, RequestOptions.DEFAULT)를 호출하여 인덱스가 존재하는지 확인한다. 이 메서드는 인덱스가 존재하면 true를 반환하고, 존재하지 않으면 false를 반환한다.

 

ElasticSearchSample1.java

    @GetMapping("/items/update")
    public String updateElasticsearchDoc() {

        BulkData bulkData = new BulkData();
        ArrayList<BulkData> bulkList = new ArrayList<>();

        String indexName = "items";
        String id = "item3";
        String itemDate = "2024-03-31";

        Map<String, Object> map = new HashMap<String,Object>();
        map.put("item_date",itemDate);

        bulkData.setActionType(BulkData.Type.UPDATE);
        bulkData.setIndexName(indexName);
        bulkData.setId(id);
        bulkData.setJsonMap(map);
        bulkList.add(bulkData);

        IndexApi indexApi = new IndexApi(client);

        if(indexApi.existIndex(indexName)){
            DocumentApi documentApi = new DocumentApi(client);
            documentApi.bulkDocumentWithBulkProcessor(bulkList, 10000);
        }

        return "elasticsearch/test";
    }

 

items 인덱스에 id가 items3 인 itemDate 필드의 값을 "2024-03-31"로 바꾸는 코드이다.

 

 

현재 item3의 item_date 값은 "2023-12-15" 이다.

 

 

실행결과 item_date 의 값이 변경된걸 볼수 있다.