Cosmos DB의 샘플 인덱싱 정책(Azure 및 패브릭)

Cosmos DB(Azure 및 패브릭)는 스키마 또는 인덱스 관리를 처리하지 않고도 애플리케이션을 반복할 수 있는 스키마에 구애받지 않는 데이터베이스입니다. Cosmos DB의 인덱싱 정책을 사용하면 인덱싱되는 속성을 제어하여 쿼리 성능을 최적화하고 비용을 절감할 수 있습니다. Cosmos DB의 인덱싱은 데이터가 어떻게 진화하든 빠르고 유연한 쿼리 성능을 제공하도록 설계되었습니다. 각 샘플에서는 특정 워크로드에 맞게 인덱싱을 조정할 수 있도록 인덱싱되는 속성, 방법 및 이유를 제어하는 다른 방법을 보여 줍니다.

모든 속성 인덱싱(기본값)

이 정책은 기본 동작인 모든 항목의 모든 속성을 인덱싱합니다. 최대 쿼리 유연성을 제공합니다.

{
  "indexingMode": "consistent",
  "includedPaths": [ 
    { 
      "path": "/*" 
    } 
  ],
  "excludedPaths": [
    {
      path: '/_etag/?'
    }
  ]
}

인덱싱에서 속성 제외

이 정책은 특정 속성을 제외한 모든 속성을 인덱싱하여 해당 속성을 쿼리할 필요가 없는 경우 스토리지 및 쓰기 비용을 줄입니다.

{
  "indexingMode": "consistent",
  "includedPaths": [ 
    { 
      "path": "/*" 
    } 
  ],
  "excludedPaths": [ 
    {
      path: '/_etag/?'
    },
    { 
      "path": "/nonIndexedProperty/?" 
    } 
  ]
}

특정 속성만 인덱싱하세요

이 정책은 지정한 속성의 인덱싱만 수행하므로 데이터의 하위 집합만 쿼리하는 경우 쓰기 성능을 향상시키고 스토리지를 줄일 수 있습니다.

{
  "indexingMode": "consistent",
  "includedPaths": [
    { 
      "path": "/name/?" 
    },
    { 
      "path": "/address/city/?" 
    }
  ],
  "excludedPaths": [ 
    {
      path: '/_etag/?'
    },
    { 
      "path": "/*" 
    } 
  ]
}

공간 인덱스 사용

이 정책은 지리 공간적 데이터에 공간 인덱스를 사용하는 방법을 보여 줍니다.

{
  "indexingMode": "consistent",
  "includedPaths": [
    { 
      "path": "/*" 
    },
    {
      "path": "/location/?",
      "indexes": [
        { 
          "kind": "Spatial", 
          "dataType": "Point" 
        }
      ]
    }
  ],
  "excludedPaths": [ 
    {
      path: '/_etag/?'
    }
  ]
}

복합 인덱스 사용

이 정책은 복합 인덱스를 추가하여 여러 속성을 함께 필터링하거나 정렬하는 쿼리를 최적화합니다.

{
  "indexingMode": "consistent",
  "includedPaths": [ 
    { 
      "path": "/*" 
    } 
  ],
  "excludedPaths": [ 
    {
      path: '/_etag/?'
    }
  ]
  "compositeIndexes": [
    [
      { 
        "path": "/category/?", 
        "order": "ascending" 
      },
      { 
        "path": "/timestamp/?", 
        "order": "descending" 
      }
    ]
  ]
}

인덱싱 사용 안 함

이 정책은 컨테이너에 대한 인덱싱을 사용하지 않도록 설정합니다. 이는 데이터를 쿼리할 필요가 없고 지점 읽기 작업만 사용하여 데이터를 가져오는 쓰기가 많은 워크로드에 유용합니다.

{
  "indexingMode": "none"
}

벡터 인덱싱 정책

이 정책을 통해 /vectors로 명명된 속성에서, 해당 항목의 임베딩을 저장하는 데 사용하는 /vectors에 대해 벡터 인덱싱을 사용할 수 있습니다. 이 인덱싱을 사용하면 512차원의 float32 벡터로 코사인 거리를 활용하여 효율적인 유사성 검색을 수행할 수 있습니다.

{
  "vectorEmbeddings": [
    {
      "path": "/vectors",
      "dataType": "float32",
      "distanceFunction": "cosine",
      "dimensions": 512
    },
  ]
}

전체 텍스트 인덱싱 정책

이 정책은 영어 언어 분석을 사용하여 효율적인 텍스트 검색 쿼리를 허용하기 위해 사용자가 지정한 속성 /text을(를) 사용하는 전체 텍스트 검색 속성을 구성합니다.

{
  "defaultLanguage": "en-US",
  "fullTextPaths": [
    {
      "path": "/text",
      "language": "en-US"
    }
  ]
}

제외된 시스템 속성을 사용하여 전체 텍스트 인덱싱

이 정책은 속성 /text에 대한 전체 텍스트 인덱싱을 사용하도록 설정하는 반면, 시스템 속성 _etag은 인덱싱에서 제외합니다.

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    }
  ]
}

여러 속성에 대한 전체 텍스트 인덱싱

이 정책은 영어 언어 분석을 사용하여 /text1/text2 속성의 전체 텍스트 인덱싱을 가능하게 하여 여러 필드에서 효율적인 텍스트 검색 쿼리를 실행합니다.

{
  "defaultLanguage": "en-US",
  "fullTextPaths": [
    {
      "path": "/text1",
      "language": "en-US"
    },
    {
      "path": "/text2",
      "language": "en-US"
    }
  ]
}

이 정책은 전체 텍스트와 벡터 인덱싱을 결합하여 하이브리드 검색 기능을 사용하도록 설정하여 동일한 컨테이너 내에서 효율적인 텍스트 및 벡터 유사성 쿼리를 허용합니다.

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
    {
      "path": "/vectors/*"
    }
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    }
  ],
  "vectorIndexes": [
    {
      "path": "/vectors",
      "type": "DiskANN"
    }
  ]
}