vectorSearch 유형을 사용하면 $vectorSearch 쿼리를 실행하기 위해 필드를 인덱싱할 수 있습니다. 쿼리할 벡터 임베딩뿐만 아니라 데이터를 사전 필터링하는 데 사용할 추가 필드에 대한 인덱스도 정의할 수 있습니다. 데이터 필터링은 시맨틱 검색의 범위를 좁히고 멀티테넌트 환경과 같이 특정 벡터 임베딩이 비교 대상으로 고려되지 않도록 하는 데 유용합니다.
Atlas UI, Atlas 관리 API, Atlas CLI, mongosh 또는 지원되는 MongoDB 드라이버 사용하여 MongoDB Vector Search 인덱스 생성할 수 있습니다.
참고
더 이상 사용되지 않는 knnBeta 연산자를 사용하여 vectorSearch 유형 인덱스 정의로 인덱싱된 필드를 쿼리할 수 없습니다.
고려 사항
vectorSearch 유형 인덱스 정의에서는 단일 요소로만 배열을 인덱스 할 수 있습니다. 문서 배열 내의 임베딩 필드 또는 객체 배열 내의 임베딩 필드를 인덱스 할 수 없습니다. 점 표기법 사용하여 문서 내부의 임베딩 필드를 인덱스 할 수 있습니다. 동일한 임베딩 필드 동일한 인덱스 정의에서 여러 번 인덱싱될 수 없습니다.
임베딩을 인덱싱 전에 클러스터에 효율적으로 저장하기 위해 임베딩을 하위 유형이 float32, int1 또는 int8 인 BSON 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 인덱스를 생성하고 관리 할 수 있습니다.
구문
다음 구문은 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 인덱스 필드
MongoDB Vector Search 인덱스 정의는 다음 필드를 사용합니다.
옵션 | 유형 | 필요성 | 목적 |
|---|---|---|---|
| 필드 정의 문서 배열 | 필수 사항 | 인덱스 할 벡터 및 필터하다 필드에 대한 정의( 문서 당 하나의 정의). 각 필드 정의 문서 인덱스 할 필드 에 대한
|
fields.type | 문자열 | 필수 사항 |
자세한 학습 은 |
fields.path | 문자열 | 필수 사항 | 인덱싱할 필드의 이름입니다. 중첩된 필드의 경우 점 표기법을 사용하여 임베디드 필드의 경로를 지정합니다. |
fields.numDimensions | Int | 필수 사항 | MongoDB Vector Search가 인덱스 시점과 쿼리 시점에 시행하는 벡터 차원의 수입니다. 이 필드 양자화된 벡터 또는 BinData를 인덱싱 하려면 다음 값 중 하나를 지정할 수 있습니다.
선택한 임베딩 모델에 따라 벡터 임베딩의 차원 수가 결정되며, 일부 모델에는 출력되는 차원 수에 대한 여러 옵션이 있는 경우도 있습니다. 자세한 학습은 임베딩 생성 방법 선택을 참조하세요. |
fields.similarity | 문자열 | 필수 사항 | 상위 K-최근접 이웃을 검색 데 사용하는 벡터 유사성 함수입니다. 이 필드 다음 값 중 하나를 지정할 수 있습니다.
|
fields.quantization | 문자열 | 옵션 | 벡터에 대한 자동 벡터 양자화 유형입니다. 임베딩이 다음 값 중 하나를 지정할 수 있습니다.
|
fields.hnswOptions | 객체 | 옵션 | Hierarchical Navigable Small Worlds 그래프 구성에 사용할 매개변수입니다. 생략하면 이 기능은 미리보기 기능 으로 제공됩니다. 기본값 을 수정하면 MongoDB Vector Search 인덱스 및 쿼리에 부정적인 영향 수 있습니다. |
fields.hnswOptions.maxEdges | Int | 옵션 | Hierarchical Navigable Small Worlds 그래프에서 노드가 가질 수 있는 최대 간선(또는 연결) 수입니다. 값은 숫자가 높을수록 그래프 더 잘 연결되어 있으므로 리콜(검색 결과의 정확도)이 향상됩니다. 그러나 이렇게 하면 그래프 노드 당 평가할 이웃 수로 인해 쿼리 속도가 느려지고, 각 노드 더 많은 연결을 저장하기 때문에 Hierarchical Navigable Small Worlds 그래프의 메모리가 증가하고, MongoDB Vector Search가 더 많은 이웃을 평가하고 다음을 조정하기 때문에 인덱싱 속도가 느려집니다. 그래프에 추가되는 모든 새 노드. |
fields.hnswOptions.numEdgeCandidates | Int | 옵션 | 쿼리 시 숫자가 높을수록 고품질 연결을 가진 그래프가 제공되어 검색 품질(재현율)을 향상시킬 수 있지만, 쿼리 지연 시간에 부정적인 영향을 미칠 수도 있습니다. |
vector 유형 정보
인덱스 정의의 vector 필드에는 다음 유형 중 하나의 숫자 배열이 포함되어야 합니다.
BSON
doubleBSON BinData
vector하위 유형float32BSON BinData
vector하위 유형int1BSON 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과 같이 유사성을 측정하지만 벡터의 크기를 고려합니다. 크기를 정규화하면 유사성 측정에서cosine과dotProduct는 거의 동일합니다.dotProduct를 사용하려면 인덱스 타임 및 쿼리 타임에 벡터를 단위 길이로 정규화해야 합니다.
다음 표는 다양한 유형에 대한 유사성 함수를 보여줍니다.
벡터 임베딩 유형 | euclidean | cosine | dotProduct |
|---|---|---|---|
| √ | ||
| √ | √ | √ |
| √ | √ | √ |
| √ | √ | √ |
벡터 수집용입니다.
자동 스칼라 또는 이진 양자화에 사용됩니다.
최상의 성능을 위해 임베딩 모델을 확인하여 임베딩 모델의 교육 프로세스 에 맞는 유사성 함수를 확인하세요. 지침 이 없는 경우 dotProduct(으)로 시작하세요. fields.similarity 을 dotProduct 값으로 설정하면 각도와 크기를 기준으로 유사성을 효율적으로 측정할 수 있습니다. dotProduct 은 cosine 보다 계산 리소스를 덜 소비하며 벡터의 길이가 단위일 때 효율적입니다. 그러나 벡터가 정규화되지 않은 경우 euclidean 거리 및 cosine 유사성에 대한 샘플 쿼리 결과의 유사성 점수를 평가하여 어느 것이 합리적인 결과에 해당하는지 결정합니다.
filter 유형 정보
선택적으로 추가 필드를 인덱싱하여 데이터를 사전 필터링할 수 있습니다. 이러한 유형의 배열을 포함하여 불리언, 날짜, 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 를 사용하여 반환하는 점수에는 영향을 주지 않습니다.
MongoDB Vector Search 인덱스 만들기
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 예제를 참조하세요.
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 인덱스 편집
기존 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 인덱스를 편집할 수 있습니다. 지원되는 운전자 버전 목록은 지원되는 클라이언트를 참조하세요.
절차
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가 인덱스를 작성하거나 편집 후 인덱스를 다시 작성하고 있습니다. 인덱스가 이 상태인 경우 다음과 같습니다:
|
활성 | 인덱스를 사용할 준비가 되었습니다. |
복구 중 | 복제에 오류가 발생했습니다. 이 상태 일반적으로 |
실패하였습니다. | Atlas 인덱스 빌드 수 없습니다. View status details 모달 창 오류를 사용하여 문제를 해결하세요. 자세히 학습 문제 해결을 참조하세요. |
삭제 진행 중 | Atlas가 클러스터 노드에서 인덱스를 삭제하는 중입니다. |
Atlas가 인덱스를 빌드하는 동안 그리고 빌드가 완료된 후 Documents 열에 인덱싱된 문서의 백분율과 개수가 표시됩니다. 이 열에는 컬렉션의 총 문서 수도 표시됩니다.