Docs Menu
Docs Home
/ /

벡터 검색을 위해 필드를 인덱싱하는 방법

vectorSearch 유형을 사용하면 $vectorSearch 쿼리를 실행하기 위해 필드를 인덱싱할 수 있습니다. 쿼리할 벡터 임베딩뿐만 아니라 데이터를 사전 필터링하는 데 사용할 추가 필드에 대한 인덱스도 정의할 수 있습니다. 데이터 필터링은 시맨틱 검색의 범위를 좁히고 멀티테넌트 환경과 같이 특정 벡터 임베딩이 비교 대상으로 고려되지 않도록 하는 데 유용합니다.

Atlas UI, Atlas 관리 API, Atlas CLI, mongosh 또는 지원되는 MongoDB 드라이버 사용하여 MongoDB Vector Search 인덱스 생성할 수 있습니다.

참고

더 이상 사용되지 않는 knnBeta 연산자를 사용하여 vectorSearch 유형 인덱스 정의로 인덱싱된 필드를 쿼리할 수 없습니다.

vectorSearch 유형 인덱스 정의에서는 단일 요소로만 배열을 인덱스 할 수 있습니다. 문서 배열 내의 임베딩 필드 또는 객체 배열 내의 임베딩 필드를 인덱스 할 수 없습니다. 점 표기법 사용하여 문서 내부의 임베딩 필드를 인덱스 할 수 있습니다. 동일한 임베딩 필드 동일한 인덱스 정의에서 여러 번 인덱싱될 수 없습니다.

임베딩을 인덱싱 전에 클러스터에 효율적으로 저장하기 위해 임베딩을 하위 유형이 float32, int1 또는 int8BSON BinData 벡터로 변환하는 것이 좋습니다. 자세한 학습은 임베딩을 BSON 벡터로 변환하는 방법을 참조하세요.

MongoDB Vector Search 인덱스를 사용하면 Atlas cluster 의 유휴 노드 에서 리소스 소비가 증가할 수 있습니다. 이는 MongoDB Vector Search에 필요한 다양한 작업을 수행하는 기본 mongot 프로세스 때문입니다. 유휴 노드 의 CPU 사용률은 인덱스의 수, 복잡성 및 크기에 따라 달라질 수 있습니다.

인덱스 크기 조정에 대한 자세한 내용은 벡터 인덱싱을 위한 메모리 요구 사항을 참조하세요.

MongoDB Vector Search 인덱스 정의한 컬렉션 을 변경하는 경우 최신 데이터를 쿼리에 즉시 사용하지 못할 수 있습니다. 그러나 mongot 는 변경 스트림을 모니터링하고 저장된 데이터 복사본을 업데이트하여 MongoDB Vector Search 인덱스의 궁극적인 일관적인 유지합니다. Atlas UI 에서 인덱싱된 Documents 의 수를 확인하여 컬렉션 의 변경 사항이 인덱스 에 반영되는지 확인할 수 있습니다.

또는 컬렉션 에 새 문서를 추가한 후 새 인덱스 만들고 인덱스 쿼리 가능해질 때까지 기다릴 수 있습니다. 또한 다음과 유사한 폴링 로직을 구현 인덱스 를 사용하기 전에 쿼리할 준비가 되었는지 확인할 수 있습니다.

예시

console.log("Polling to check if the index is ready. This may take up to a minute.")
let isQueryable = false;
while (!isQueryable) {
const cursor = collection.listSearchIndexes();
for await (const index of cursor) {
if (index.name === result) {
if (index.queryable) {
console.log(`${result} is ready for querying.`);
isQueryable = true;
} else {
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
}
}

Atlas UI, mongosh, Atlas CLI, Atlas 관리 API 및 다음 MongoDB 드라이버:를 통해 MongoDB Vector Search 인덱스를 생성하고 관리 할 수 있습니다.

MongoDB 드라이버
버전

1.28.0 이상

3.11.0 이상

3.1.0 이상

1.16.0 이상

5.2.0 이상

5.2.0 이상

6.6.0 이상

1.20.0 이상

4.7 이상

3.1.0 이상

5.2.0 이상

다음 구문은 vectorSearch 인덱스 유형을 정의합니다.

1{
2 "fields":[
3 {
4 "type": "vector",
5 "path": "<field-to-index>",
6 "numDimensions": <number-of-dimensions>,
7 "similarity": "euclidean | cosine | dotProduct",
8 "quantization": "none | scalar | binary",
9 "hnswOptions": {
10 "maxEdges": <number-of-connected-neighbors>,
11 "numEdgeCandidates": <number-of-nearest-neighbors>
12 }
13 },
14 {
15 "type": "filter",
16 "path": "<field-to-index>"
17 },
18 ...
19 ]
20}

MongoDB Vector Search 인덱스 정의는 다음 필드를 사용합니다.

옵션
유형
필요성
목적

fields

필드 정의 문서 배열

필수 사항

인덱스 할 벡터 및 필터하다 필드에 대한 정의( 문서 당 하나의 정의). 각 필드 정의 문서 인덱스 할 필드 에 대한 type, path 및 기타 구성 옵션을 지정합니다.

fields 배열 vector유형 필드 정의가 하나 이상 포함되어야 합니다. 배열 에 추가 filter유형 필드 정의를 추가하여 데이터를 사전 필터링할 수 있습니다.

fields.
type

문자열

필수 사항

$vectorSearch 필드를 인덱싱하는 데 사용할 필드 유형입니다. 다음 값 중 하나를 지정할 수 있습니다.

  • vector - 벡터 임베딩이 포함된 필드의 경우.

  • filter - 추가적으로 필터링할 필드에 사용합니다. 이러한 유형의 배열을 포함하여 불리언, 날짜, ObjectID, 숫자, string 및 UUID 값을 기준으로 필터링할 수 있습니다.

자세한 학습 은 vector 유형 정보 filter 유형 정보를 참조하세요.

fields.
path

문자열

필수 사항

인덱싱할 필드의 이름입니다. 중첩된 필드의 경우 점 표기법을 사용하여 임베디드 필드의 경로를 지정합니다.

fields.
numDimensions

Int

필수 사항

MongoDB Vector Search가 인덱스 시점과 쿼리 시점에 시행하는 벡터 차원의 수입니다. 이 필드 vector유형 필드에 대해서만 설정하다 수 있습니다. 8192보다 작거나 같은 값을 지정해야 합니다.

양자화된 벡터 또는 BinData를 인덱싱 하려면 다음 값 중 하나를 지정할 수 있습니다.

  • 1 수집을 위한 int8 벡터의 경우 8192 로 설정합니다.

  • 수집을 위한 int1 벡터에 대한 8 의 배수입니다.

  • 1 binData(float32) 의 경우 8192, 자동 스칼라 양자화의 경우 array(float32) 벡터입니다.

  • 자동 이진 양자화를 위한 binData(float32)array(float32) 벡터에 대한 8 의 배수입니다.

선택한 임베딩 모델에 따라 벡터 임베딩의 차원 수가 결정되며, 일부 모델에는 출력되는 차원 수에 대한 여러 옵션이 있는 경우도 있습니다. 자세한 학습은 임베딩 생성 방법 선택을 참조하세요.

fields.
similarity

문자열

필수 사항

상위 K-최근접 이웃을 검색 데 사용하는 벡터 유사성 함수입니다. 이 필드 vector유형 필드에 대해서만 설정하다 수 있습니다.

다음 값 중 하나를 지정할 수 있습니다.

  • euclidean - 벡터의 끝과 끝 사이의 거리를 측정합니다.

  • cosine - 벡터 사이의 각도를 기준으로 유사성을 측정합니다.

  • dotProduct - cosine와(과) 같이 유사성을 측정하지만 벡터의 크기를 고려합니다.

자세한 학습 유사성 함수 정보를 참조하세요.

fields.
quantization

문자열

옵션

벡터에 대한 자동 벡터 양자화 유형입니다. 임베딩이 float 또는 double 벡터인 경우에만 이 설정을 사용합니다.

다음 값 중 하나를 지정할 수 있습니다.

  • none - 벡터 임베딩에 대한 자동 양자화를 수행하지 않음을 나타냅니다. 수집을 위해 사전에 양자화된 벡터가 있는 경우 이 설정을 사용합니다. 생략하면 이 값이 기본값 입니다.

  • scalar - 값을 1 바이트 정수로 변환하는 스칼라 양자화를 나타냅니다.

  • binary - 값을 단일 비트로 변환하는 이진 양자화를 나타냅니다. 이 값을 사용하려면 numDimensions 이 8의 배수여야 합니다.

    정밀도가 중요한 경우 binary 대신 none 또는 scalar 를 선택합니다.

자세한 학습 은 벡터 양자화를 참조하세요.

fields.
hnswOptions

객체

옵션

Hierarchical Navigable Small Worlds 그래프 구성에 사용할 매개변수입니다. 생략하면 maxEdgesnumEdgeCandidates 매개변수에 기본값 을 사용합니다.

기능은 미리보기 기능 으로 제공됩니다. 기본값 을 수정하면 MongoDB Vector Search 인덱스 및 쿼리에 부정적인 영향 수 있습니다.

fields.
hnswOptions.
maxEdges

Int

옵션

Hierarchical Navigable Small Worlds 그래프에서 노드가 가질 수 있는 최대 간선(또는 연결) 수입니다. 값은 16 에서 64 사이일 수 있으며 둘 다 포함합니다. 생략하면 기본값은 16입니다. 예시 16 들어 값의 경우, 각 노드 Hierarchical Navigable Small Worlds 그래프 의 각 레이어에서 나가는 가장자리를 최대 16개 가질 수 있습니다.

숫자가 높을수록 그래프 더 잘 연결되어 있으므로 리콜(검색 결과의 정확도)이 향상됩니다. 그러나 이렇게 하면 그래프 노드 당 평가할 이웃 수로 인해 쿼리 속도가 느려지고, 각 노드 더 많은 연결을 저장하기 때문에 Hierarchical Navigable Small Worlds 그래프의 메모리가 증가하고, MongoDB Vector Search가 더 많은 이웃을 평가하고 다음을 조정하기 때문에 인덱싱 속도가 느려집니다. 그래프에 추가되는 모든 새 노드.

fields.
hnswOptions.
numEdgeCandidates

Int

옵션

쿼리 시 numCandidates와 유사하게, 이 매개변수는 새 노드에 연결할 가장 가까운 노드를 찾기 위해 평가할 최대 노드 수를 제어합니다. 값은 100~ 3200일 수 있으며, 두 값 모두 포함됩니다. 이를 생략하는 경우 기본값은 100입니다.

숫자가 높을수록 고품질 연결을 가진 그래프가 제공되어 검색 품질(재현율)을 향상시킬 수 있지만, 쿼리 지연 시간에 부정적인 영향을 미칠 수도 있습니다.

인덱스 정의의 vector 필드에는 다음 유형 중 하나의 숫자 배열이 포함되어야 합니다.

  • BSON double

  • BSON BinData vector 하위 유형 float32

  • BSON BinData vector 하위 유형 int1

  • BSON BinData vector 하위 유형 int8

참고

데이터에 대한 BSON BinData 하위 유형 float32 int1 또는 int8 벡터를 생성하는 방법에 대해 자세히 학습하려면 사전 양자화된 벡터를 수집하는 방법을 참조하세요.

벡터 필드를 fields 배열 내에서 vector 유형으로 인덱싱해야 합니다.

다음 구문은 vector 필드 유형을 정의합니다.

1{
2 "fields":[
3 {
4 "type": "vector",
5 "path": <field-to-index>,
6 "numDimensions": <number-of-dimensions>,
7 "similarity": "euclidean | cosine | dotProduct",
8 "quantization": "none | scalar | binary",
9 "hnswOptions": {
10 "maxEdges": <number-of-connected-neighbors>,
11 "numEdgeCandidates": <number-of-nearest-neighbors>
12 }
13 },
14 ...
15 ]
16}

MongoDB Vector Search는 다음과 같은 유사성 함수를 지원합니다.

  • euclidean - 벡터의 끝과 끝 사이의 거리를 측정합니다. 이 값을 사용하면 다양한 차원을 기반으로 유사성을 측정할 수 있습니다. 자세한 학습 은 유클리드를 참조하세요.

  • cosine - 벡터 사이의 각도를 기준으로 유사성을 측정합니다. 이 값을 사용하면 크기에 따라 배율이 조정되지 않는 유사성을 측정할 수 있습니다. cosine에는 크기가 0인 벡터를 사용할 수 없습니다. 코사인 유사성을 측정하려면 벡터를 정규화하고 대신 dotProduct 를 사용하는 것이 좋습니다.

  • dotProduct - cosine과 같이 유사성을 측정하지만 벡터의 크기를 고려합니다. 크기를 정규화하면 유사성 측정에서 cosinedotProduct는 거의 동일합니다.

    dotProduct를 사용하려면 인덱스 타임 및 쿼리 타임에 벡터를 단위 길이로 정규화해야 합니다.

다음 표는 다양한 유형에 대한 유사성 함수를 보여줍니다.

벡터 임베딩 유형
euclidean
cosine
dotProduct

binData(int1)

binData(int8)

binData(float32)

array(float32)

벡터 수집용입니다.

자동 스칼라 또는 이진 양자화에 사용됩니다.

최상의 성능을 위해 임베딩 모델을 확인하여 임베딩 모델의 교육 프로세스 에 맞는 유사성 함수를 확인하세요. 지침 이 없는 경우 dotProduct(으)로 시작하세요. fields.similaritydotProduct 값으로 설정하면 각도와 크기를 기준으로 유사성을 효율적으로 측정할 수 있습니다. dotProductcosine 보다 계산 리소스를 덜 소비하며 벡터의 길이가 단위일 때 효율적입니다. 그러나 벡터가 정규화되지 않은 경우 euclidean 거리 및 cosine 유사성에 대한 샘플 쿼리 결과의 유사성 점수를 평가하여 어느 것이 합리적인 결과에 해당하는지 결정합니다.

선택적으로 추가 필드를 인덱싱하여 데이터를 사전 필터링할 수 있습니다. 이러한 유형의 배열을 포함하여 불리언, 날짜, ObjectID, 숫자, string 및 UUID 값을 기준으로 필터링할 수 있습니다. 데이터 필터링은 시맨틱 검색의 범위를 좁히고 모든 벡터가 비교 대상에 포함되지 않도록 하는 데 유용합니다. 이는 유사성 비교를 실행할 문서 수를 줄여 쿼리 지연 시간을 줄이고 검색 결과의 정확성을 높일 수 있습니다.

fields 배열 내부의 filter 유형을 사용하여 필터하다 하려는 필드를 인덱스 해야 합니다.

다음 구문은 filter 필드 유형을 정의합니다.

1{
2 "fields":[
3 {
4 "type": "vector",
5 ...
6 },
7 {
8 "type": "filter",
9 "path": "<field-to-index>"
10 },
11 ...
12 ]
13}

참고

데이터를 사전 필터링해도 MongoDB Vector Search가 $vectorSearch 쿼리에 대해 $vectorSearchScore 를 사용하여 반환하는 점수에는 영향을 주지 않습니다.

Atlas UI, Atlas 관리 API, Atlas CLI 를 통해 클러스터 의 다른 데이터와 함께 모든 종류의 데이터에 대해 길이가 8192 차원 이하인 벡터 임베딩이 포함된 모든 컬렉션에 대해 MongoDB Vector Search 인덱스 생성할 수 있습니다. mongosh 또는 지원되는 MongoDB 드라이버.

MongoDB Vector Search 인덱스 만들려면 다음 전제 조건을 갖춘 클러스터 있어야 합니다.

  • MongoDB 버전 6.0.11, 7.0.2 이상

  • MongoDB Vector Search 인덱스 생성할 컬렉션 입니다.

참고

mongosh 명령 또는 운전자 헬퍼 메서드를 사용하여 모든 Atlas cluster 계층에서 MongoDB Vector Search 인덱스를 생성할 수 있습니다. 지원되는 운전자 버전 목록은 지원되는 클라이언트를 참조하세요.

MongoDB Vector Search 인덱스를 생성하고 관리 하려면 Project Data Access Admin 이상의 역할 필요합니다.

초과하여 만들 수 없습니다.

  • M0 클러스터의 인덱스 3개 (유형에 관계없이 search 또는 vector).

  • Flex 클러스터의 인덱스 10개.

단일 M10+ 클러스터 에 2,500 이하의 검색 인덱스를 생성하는 것이 좋습니다.

참고

이 절차에는 sample_mflix 데이터베이스 의 embedded_movies 컬렉션 에 대한 인덱스 정의 예제가 포함되어 있습니다. 클러스터에 샘플 데이터를 로드하고 이 컬렉션에 대한 예시 MongoDB Vector Search 인덱스를 만들면 이 컬렉션에 대해 샘플 $vectorSearch 쿼리를 실행할 수 있습니다. 실행 수 있는 샘플 쿼리에 대해 자세히 학습하려면 $vectorSearch 예제를 참조하세요.

Atlas UI, Atlas 관리 API, Atlas CLI, mongosh 또는 지원되는 MongoDB 드라이버에서 모든 컬렉션에 대한 MongoDB Vector Search 인덱스를 볼 수 있습니다.

MongoDB Vector Search 인덱스를 보려면 Project Search Index Editor 이상의 역할 필요합니다.

참고

mongosh 명령 또는 운전자 헬퍼 메서드를 사용하여 모든 Atlas cluster 계층에서 MongoDB Vector Search 인덱스를 조회 수 있습니다. 지원되는 운전자 버전 목록은 지원되는 클라이언트를 참조하세요.

기존 MongoDB Vector Search 인덱스 의 인덱스 정의는 Atlas UI, Atlas 관리 API, Atlas CLI, 또는 mongosh 지원되는 MongoDB 드라이버 에서 변경할 수 있습니다. 인덱스 이름을 바꾸거나 인덱스 유형을 변경할 수 없습니다. 인덱스 이름이나 유형을 변경해야 하는 경우 새 인덱스 만들고 이전 인덱스를 삭제 해야 합니다.

중요

인덱스 편집하면 MongoDB Vector Search가 인덱스를 다시 작성합니다. 인덱스 다시 작성되는 동안 이전 인덱스 정의를 사용하여 벡터 검색 쿼리를 계속 실행 수 있습니다. 인덱스 재작성이 완료되면 이전 인덱스 자동으로 교체됩니다. 이 프로세스 MongoDB Search 인덱스와 유사합니다. 자세한 학습 은 MongoDB 검색 인덱스 생성 및 업데이트를 참조하세요.

MongoDB Vector Search 인덱스 편집하려면 Project Search Index Editor 이상의 역할 있어야 합니다.

참고

mongosh 명령 또는 운전자 헬퍼 메서드를 사용하여 모든 Atlas cluster 계층에서 MongoDB Vector Search 인덱스를 편집할 수 있습니다. 지원되는 운전자 버전 목록은 지원되는 클라이언트를 참조하세요.

Atlas UI, Atlas 관리 API, Atlas CLI, mongosh 또는 지원되는 MongoDB 드라이버에서 언제든지 MongoDB Vector Search 인덱스 삭제 수 있습니다.

MongoDB Vector Search 인덱스 삭제 하려면 Project Search Index Editor 이상의 역할 있어야 합니다.

참고

mongosh 명령 또는 운전자 헬퍼 메서드를 사용하여 모든 Atlas cluster 계층에서 MongoDB Vector Search 인덱스를 삭제 수 있습니다. 지원되는 운전자 버전 목록은 지원되는 클라이언트를 참조하세요.

MongoDB Vector Search 인덱스 만들면 Status 열에 클러스터 의 프라이머리 노드 에 있는 인덱스 의 현재 상태 표시됩니다. 상태 아래의 View status details 링크를 클릭하면 클러스터 의 모든 노드에 있는 인덱스 상태 볼 수 있습니다.

Status 열이 Active로 표시되면 인덱스가 사용할 준비가 된 것입니다. 다른 상태에서는 인덱스에 대한 쿼리가 불완전한 결과를 반환할 수 있습니다.

상태
설명

시작되지 않음

Atlas가 아직 인덱스 빌드를 시작하지 않았습니다.

초기 동기화

Atlas가 인덱스를 작성하거나 편집 후 인덱스를 다시 작성하고 있습니다. 인덱스가 이 상태인 경우 다음과 같습니다:

  • 새 인덱스 의 경우 MongoDB Vector Search는 인덱스 빌드 완료될 때까지 쿼리를 제공 하지 않습니다.

  • 기존 인덱스의 경우 인덱스가 다시 빌드될 때까지 기존 쿼리와 새 쿼리에 대해 이전 인덱스를 계속 사용할 수 있습니다.

활성

인덱스를 사용할 준비가 되었습니다.

복구 중

복제에 오류가 발생했습니다. 이 상태 일반적으로 mongod oplog 에서 현재 복제 점 더 이상 사용할 수 없을 때 발생합니다. 기존 인덱스가 업데이트되고 상태가 Active(으)로 변경될 때까지 기존 인덱스 계속 쿼리 할 수 있습니다. View status details 모달 창 오류를 사용하여 문제를 해결하세요. 자세히 학습 문제 해결을 참조하세요.

실패하였습니다.

Atlas 인덱스 빌드 수 없습니다. View status details 모달 창 오류를 사용하여 문제를 해결하세요. 자세히 학습 문제 해결을 참조하세요.

삭제 진행 중

Atlas가 클러스터 노드에서 인덱스를 삭제하는 중입니다.

Atlas가 인덱스를 빌드하는 동안 그리고 빌드가 완료된 후 Documents 열에 인덱싱된 문서의 백분율과 개수가 표시됩니다. 이 열에는 컬렉션의 총 문서 수도 표시됩니다.

돌아가기

임베딩 생성

스킬 배지 획득

무료로 '벡터 검색 기초'를 마스터하세요!

자세한 내용을 알아보세요.