Elastic Search

Ch03. 데이터 모델링 - 메타 필드

webmaster 2025. 9. 7. 17:14
728x90

메타 필드는 메타 데이터를 저장하는 특수 목적의 필드로써, 이를 이용하면 검색 시 문서를 다양한 형태로 제어하는 것이 가능하다.

_index 메타 필드

_index 메타 필드는 해당 문서가 속한 인덱스의 이름을 담고 있으며 이를 이용해 검색된 문서의 인덱스 명과 해당 인덱스에 몇 개의 문서가 있는지 알 수 있다.

POST movie_search/_search
{
    "size": 0,
    "aggs": {
        "indices": {
            "terms": {
                "field": "_index",
                "size": 10
            }
        }
    }
}

결과

... 생략
"buckets": [
    {
        "key": "movie_search",
        "doc _count": 29507
    }
]
  • 조회 시, 인덱스 별 카운트 정보를 얻을 수 있다.

_type 메타 필드

_type 메타 필드는 해당 문서가 속한 매핑의 타입 정보를 담고 있다. 이를 이용해 해당 인덱스 내부에서 타입별로 몇 개의 문서가 있는지 확인할 수 있다.

POST movie_search/_search
{
    "size": 0,
    "aggs": {
        "indices": {
            "terms": {
                "field": "_type",
                "size": 10
            }
        }
    }
}

결과

... 생략
"buckets": [
    {
        "key": "_doc",
		"doc_count": 29507
    }
]

 

  • 타입별 카운트 정보를 얻을 수 있다.

_index 메타 필드

_id 메타 필드는 문서를 식별하는 유일한 키로, 한 인덱스에서 색인된 문서마다 서로 다른 키 값을 가진다.

POST movie_search/_search
{
    "size": 0,
    "aggs": {
        "indices": {
            "terms": {
                "field": "_id",
                "size": 10
            }
        }
    }
}

결과

... 생략
"buckets": [
    {
        "key": "20173732",
		"doc_count": 1
    }
]

_uid 메타 필드

_uid 메타 필드는 특수한 목적의 식별키로, # 태그를 사용해 _type과 _id 값을 조합해 사용한다.(내부적으로만 사용되기 때문에 검색 시 조회되는 값은 아니다)

POST movie_search/_search
{
    "size": 0,
    "aggs": {
        "indices": {
            "terms": {
                "field": "_uid",
                "size": 10
            }
        }
    }
}

결과

... 생략
"buckets": [
    {
        "key": "_doc#20173732",
		"doc_count": 1
    }
]

_Source 메타 필드

_source 메타 필드는 문서의 원본 데이터를 제공한다(내부에는 색인 시 전달된 원본 JSON 문서의 본문이 저장돼 있다)

POST /_reindex
{
    "source": {
        "index": "movie_search",
        "query": {
            "match": {
                "movied": "20173732"
            }
        }
    },
    "dest": {
        "index": "reindex_movie"
    },
    "script": {
        "source": "ctx._source.prdtYear++"
    }
}
  • 일반적으로 원본 JSON 문서를 검색 결과로 표시할 때 사용한다.
  • _reindex API나 스크립트를  사용해 해당 값을 계산할 때 해당 메타 필드를 활용할 수 있다.

_all 메타 필드

_all 메타 필드는 색인에 사용된 모든 필드의 정보를 가진 메타 필드로, 모든 필드의 내용이 하나의 텍스트로 합쳐져서 제공된다.

  • 특정 필드가 아닌 문서 전체 필드에서 특정 키워드를 검색한다면, _all 메타 필드를 사용하면 된다.
  • _all 메타 필드는 데이터 크기를 너무 많이 차지하는 문제로 인해 엘라스틱서치 6.0 이상부터는 폐기 되었다.
    • 필드 복사가 필요할 경우 copy_to 파라미터를 사용해야 한다.

_routing 메타 필드

_routing 메타 필드는 특정 문서를 특정 샤드에 저장하기 위해 사용자가 지정하는 메타 필드이다.

Hash (_routing) & num_of_shards
  • 기본적으로 색인 시, 해당 문서는 특정 수식에 따라 문서 id를 이용해 문서가 색인될 샤드를 결정하며, 별도 설정 없다면 문서는 샤드에 골고루 분산되어 저장된다.
  • _routing 메타 필드를 사용하면 색인 시, 문서들을 동일한 라우팅 ID를 지정할 수 있다.
    • 문서 ID를 사용하는 대신 파라미터로 입력한 _routing 값이 샤드를 결정하는 데 사용한다.
PUT movie_routing/_doc/1?routing=ko
{
	"repGenreNim": "한국어",
    "movieNm": "살아남은아이"
}
  • _routing 값을 지정해서 문서를 색인한다.
  • 검색할 때도 _routing 값을 지정해서 조회해야 한다.
728x90