본문 바로가기

프로젝트/여행지 오픈 API

[ElasticSearch] 2. 다이나믹 매핑, 도큐먼트 CRUD

목차

    [ES]인덱싱 : 다이나믹 매핑, 도큐먼트 CRUD

    공식 Docs ref:

    https://www.elastic.co/guide/en/elasticsearch/reference/7.11/index.html

    이전 포스팅에 이어 인덱싱을 마저 확인해보자.

    다이나믹 매핑

    만약 인덱싱된 값에 추가 도큐먼트를 넣을때, 필드 프로퍼티가 다를 경우 엘라스틱 서치는 어떻게 동작할까?

    만약 다음과 같이 구문을 작성했다 가정해보자.
    
    //1. 다른 프로퍼티 'country'의 추가
    PUT index2/_doc/2
    {
        "name" : "jane",
        "country" : "france"
    }
    //이 경우 기존 필드를 사용하지 않고, 새로운 프로퍼티를 추가했지만 문제없이 인덱싱이 가능하다.
    
    //2. 도큐먼트 매핑
    PUT index2/_doc/3
    {
        "name" : "kim",
        "age" : "20",
        "gender" : "female"
    }
    
    //이 경우 age를 String으로 적었지만, 숫자로 변환을 시도해 유연하게 저장한다.

    도큐먼트 매핑은 자동으로 필드 타입을 추론해서 매핑을 생성하는 기능이다.

    예를 들어, 숫자로 보이는 데이터가 들어오면 "integer"나 "float"로, 문자열이 들어오면 "text" 또는 "keyword"로 자동으로 설정된다.

    도큐먼트

    도큐먼트 읽기

    인덱스의 매핑 정보만 보여주는 것이 아니라 실제 저장된 도큐먼트의 리스트와 값을 확인하려면 Elasticsearch의 검색 API를 사용해야 한다.

    간단한 예로 _search 엔드포인트를 사용할 수 있다.

    GET /index2/_search

    이 명령을 사용하면 index2에 저장된 도큐먼트들의 기본 정보와 값을 볼 수 있다. 이 명령은 모든 도큐먼트를 반환하지는 않으며, 기본적으로는 상위 10개의 도큐먼트만 반환한다.

    더 많은 도큐먼트를 보고 싶다면, 쿼리 파라미터를 추가할 수 있다.

    GET /index2/_search?size=50

    이렇게 하면 상위 50개의 도큐먼트를 반환한다.

    _search 엔드포인트는 매우 다양한 쿼리 옵션을 제공해서, 필요한 도큐먼트만 선별적으로 검색할 수도 있다.

    즉, 인덱스의 매핑 정보는 인덱스 구조를 알려주고, 실제 데이터는 검색 API를 통해 확인할 수 있다.

    도큐먼트 수정

    엘라스틱 서치의 도큐먼트 수정은 자원을 많이 사용하기에 권장하지 않는다.

    수정의 과정은 1. 도큐먼트 덮어쓰기, 혹은 2. _update 쿼리 사용이 존재한다.

    덮어쓰기의 경우 동일 인덱스 번호에 값을 덮어쓰면 최신 값으로 적용된다.

    도큐먼트를 수정할 때는 _update API를 사용한다. 예를 들어, index2에 ID가 1인 도큐먼트의 name 필드를 "John"으로 변경하려면 다음과 같이 할 수 있다.

    POST /index2/_update/1
    {
      "doc": {
        "name": "John"
      }
    }
    

    _update API는 부분적인 업데이트를 지원한다. 즉, 지정된 필드만 변경되고 나머지는 그대로 유지된다.

    도큐먼트 삭제

    도큐먼트를 삭제할 때는 _delete API를 사용한다. 예를 들어, index2에서 ID가 1인 도큐먼트를 삭제하려면 다음과 같이 할 수 있다.

    DELETE /index2/_doc/1

    주의 사항

    • 도큐먼트를 수정하거나 삭제하기 전에 해당 도큐먼트가 실제로 존재하는지 확인이 필요하다.
    • 도큐먼트 삭제는 되돌릴 수 없으므로 주의가 필요하다.