store 매핑 파라미터

store 매핑 파라미터

store 매핑 파라미터는 필드의 값이 _source와 별도로 저장되어, 검색 요청의 stored_fields 옵션을 사용해 직접 검색할 수 있게 할지 여부를 결정해요.

기본적으로 store는 false로 설정되어 있어서 필드 값이 개별적으로 저장되지 않고 문서 _source의 일부로만 사용 가능해요. store를 true로 설정하면 _source를 비활성화해 디스크 공간을 절약하면서도 특정 필드는 여전히 검색할 수 있어요.

출처: 문서

본문

예제: 필드에서 store 활성화하기

다음 요청은 model 필드가 _source와 별도로 저장되는 products 인덱스를 생성해요:

PUT /products
{
  "mappings": {
    "properties": {
      "model": {
        "type": "keyword",
        "store": true
      },
      "name": {
        "type": "text"
      }
    }
  }
}

인덱스에 문서를 입력(ingest)해요:

PUT /products/_doc/1
{
  "model": "WM-1001",
  "name": "Wireless Mouse"
}

저장된 필드만 검색해요:

POST /products/_search
{
  "query": {
    "match": {
      "name": "Mouse"
    }
  },
  "stored_fields": ["model"]
}

이 쿼리는 _source가 여전히 사용 가능함에도 불구하고, 별도로 저장된 model 필드를 반환해요.

예제: _source가 비활성화된 상태로 필드 저장하기

디스크 공간을 절약하고 나중에 전체 원본 문서에 접근할 필요가 없다면(예: reindexing이나 업데이트), _source를 비활성화하고 필요한 필드만 저장할 수 있어요:

PUT /products_no_source
{
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "model": {
        "type": "keyword",
        "store": true
      },
      "name": {
        "type": "text"
      }
    }
  }
}

인덱스에 문서를 입력해요:

PUT /products_no_source/_doc/1
{
  "model": "KB-2002",
  "name": "Mechanical Keyboard"
}

저장된 필드를 검색해요:

POST /products_no_source/_search
{
  "query": {
    "match": {
      "name": "Keyboard"
    }
  },
  "stored_fields": ["model"]
}

이 쿼리는 _source에 접근하지 않고 저장된 stored_fields에서 model 필드를 가져와 반환해요.

다음과 같이 _source를 검색하려고 시도하면:

GET /products_no_source/_doc/1

응답의 _source는 null이 돼요. 이는 _source가 비활성화되어 전체 문서를 더 이상 사용할 수 없고 저장된 필드만 검색할 수 있다는 것을 보여줘요:

{
  "_index": "products_no_source",
  "_id": "1",
  "found": true,
  "_source": null
}

더 알아보기 (Learn more)