Docs Menu

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

vectorSearch 유형을 사용하면 $vectorSearch 쿼리를 실행하기 위해 필드를 인덱싱할 수 있습니다. 쿼리하려는 벡터 임베딩에 대한 인덱스와 데이터를 사전 필터링하는 데 사용할 부울, 날짜, objectId, 숫자, 문자열 또는 UUID 값을 정의할 수 있습니다. 데이터 필터링은 시맨틱 검색 범위를 좁히고 멀티 테넌트 환경 등에서 특정 벡터 임베딩이 비교 대상으로 고려되지 않도록 하는 데 유용합니다.

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

참고

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

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

임베딩을 인덱싱 하기 전에 Atlas cluster 에 효율적으로 저장 수있도록 임베딩을 BSON BinData vector 하위 유형 float32, int1 또는 벡터로 변환하는 것이 좋습니다. 학습 int8 내용은 임베딩을 BSON 벡터로 변환하는 방법을 참조하세요.

참고

다음에 대한 Atlas Vector Search 지원 은 Preview 기능 으로 사용할 수 있습니다.

  • BSON BinData 하위 vector 유형 int1 수집.

  • 자동 스칼라 양자화.

  • 자동 이진 양자화.

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

Atlas UI,, Atlas CLI, Atlas Administration API 및 다음 MongoDBmongosh드라이버를 통해 Atlas 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 },
10 {
11 "type": "filter",
12 "path": "<field-to-index>"
13 },
14 ...
15 ]
16}

Atlas Vector Search 인덱스 정의에는 다음 필드가 사용됩니다.

옵션
유형
필요성
목적

fields

문서 배열

필수 사항

벡터 및 필터 필드를 인덱싱하려면 문서당 하나씩 지정합니다. 최소한 하나의 문서에 벡터 필드에 대한 필드 정의가 포함되어야 합니다. 선택적으로 부울, 날짜, 숫자, objectId, 문자열 및 UUID 필드를 문서당 하나씩 인덱싱하여 데이터를 사전 필터링할 수 있습니다.

fields.type

문자열

필수 사항

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

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

  • filter - 부울, 날짜, objectId, 숫자, 문자열 또는 UUID 값이 포함된 필드의 경우.

fields.path

문자열

필수 사항

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

두 개의 연속된 점이나 점으로 끝나는 필드 이름은 인덱싱할 수 없습니다. 예를 들어 Atlas Vector Search는 foo..bar 또는 foo_bar. 필드 이름의 인덱싱을 지원하지 않습니다.

fields.numDimensions

int

필수 사항

Atlas Vector Search 가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다. 보다 작거나 같은 값을 지정해야 4096 합니다.BinData 또는 양자화된 벡터를 인덱싱 하려면 값이 다음 중 하나여야 합니다.

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

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

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

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

이 필드 는 vector 유형 필드에 대해서만 설정하다 수 있습니다.

fields.similarity

문자열

필수 사항

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

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

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

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

학습 내용은 유사성 함수 정보를 참조하세요.

fields.quantization

문자열

옵션

벡터에 대한 자동 벡터 양자화 유형입니다. 벡터에 적용 양자화 유형을 지정할 수 있습니다. 임베딩이 float 또는 double 벡터인 경우에만 이 설정을 사용합니다. 값은 다음 중 하나일 수 있습니다.

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

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

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

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

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

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

  • BSON double

  • BSON BinData vector 하위 유형 float32

  • BSON BinData vector 하위 유형 int1

  • BSON BinData vector 하위 유형 int8

참고

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

다음에 대한 Atlas Vector Search 지원 은 Preview 기능 으로 사용할 수 있습니다.

  • BSON BinData 하위 vector 유형 int1 수집.

  • 자동 스칼라 양자화.

  • 자동 이진 양자화.

벡터 필드를 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 },
10 ...
11 ]
12}

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

  • euclidean - 벡터의 끝과 끝 사이의 거리를 측정합니다. 이 값을 통해 다양한 차원을 기준으로 유사성을 측정할 수 있습니다. 자세히 알아보려면 Euclidean을 참조하세요.

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

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

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

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

벡터 임베딩 유형
euclidean
consine
dotProduct

binData(int1)

binData(int8)

binData(float32)

array(float32)

벡터 수집용입니다.

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

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

선택적으로 부울, 날짜, 숫자, objectId, 문자열 및 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}

참고

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

Atlas Search 인덱스는 데이터를 쉽게 검색할 수 있는 형식으로 분류하는 데이터 구조입니다. 용어와 해당 용어가 포함된 문서 간의 매핑입니다. Atlas Search 인덱스를 활성화하면 특정 식별자를 사용하여 문서를 더 빠르게 검색할 수 있습니다. Atlas Search를 사용하여 Atlas 클러스터의 데이터를 쿼리하려면 Atlas Search 인덱스를 구성해야 합니다.

단일 필드 또는 여러 필드에 대해 Atlas Search 인덱스를 만들 수 있습니다. 쿼리 시점에 관련 데이터를 포함하는 문서를 빠르게 검색할 수 있도록, 데이터를 정렬하거나 필터링하는 데 정기적으로 사용하는 필드를 인덱싱하는 것이 좋습니다.

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

Atlas Vector Search 인덱스를 생성하려면 다음 전제 조건을 갖춘 Atlas 클러스터가 있어야 합니다.

  • MongoDB 버전 6.0.11, 7.0.2 이상

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

참고

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

Atlas Vector Search 인덱스를 생성하고 관리하려면 Project Data Access Admin 이상의 역할이 있어야 합니다.

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

  • M0 클러스터의 인덱스 3개.

  • M2 클러스터의 인덱스 5개.

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

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


언어 선택 드롭다운 메뉴를 사용하여 인덱스를 만드는 데 사용할 클라이언트를 선택합니다.


참고

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

Atlas 관리 API를 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 생성하려면 필수 파라미터와 함께 Atlas Search indexes 엔드포인트에 POST 요청을 보냅니다.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2--header "Accept: application/json" \
3--header "Content-Type: application/json" \
4--include \
5--request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \
6--data '
7 {
8 "database": "<name-of-database>",
9 "collectionName": "<name-of-collection>",
10 "type": "vectorSearch",
11 "name": "<index-name>",
12 "definition": {
13 "fields":[
14 {
15 "type": "vector",
16 "path": <field-to-index>,
17 "numDimensions": <number-of-dimensions>,
18 "similarity": "euclidean | cosine | dotProduct"
19 },
20 {
21 "type": "filter",
22 "path": "<field-to-index>"
23 },
24 ...
25 }
26 ]
27 }'

엔드포인트의 구문 및 매개변수에 대해 자세히 알아보려면 Atlas Search 인덱스 1개 생성을 참조하세요.

예시

다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드만 인덱싱합니다.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2--header "Accept: application/json" \
3--header "Content-Type: application/json" \
4--include \
5--request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \
6--data '
7 {
8 "database": "sample_mflix",
9 "collectionName": "embedded_movies",
10 "type": "vectorSearch",
11 "name": "vector_index",
12 "definition: {
13 "fields":[
14 {
15 "type": "vector",
16 "path": "plot_embedding",
17 "numDimensions": 1536,
18 "similarity": "dotProduct"
19 }
20 ]
21 }
22 }'

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2--header "Accept: application/json" \
3--header "Content-Type: application/json" \
4--include \
5--request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \
6--data '
7 {
8 "database": "sample_mflix",
9 "collectionName": "embedded_movies",
10 "type": "vectorSearch",
11 "name": "vector_index",
12 "definition: {
13 "fields":[
14 {
15 "type": "vector",
16 "path": "plot_embedding",
17 "numDimensions": 1536,
18 "similarity": "dotProduct"
19 },
20 {
21 "type": "filter",
22 "path": "genres"
23 },
24 {
25 "type": "filter",
26 "path": "year"
27 }
28 ]
29 }
30 }'

Atlas CLI v1.14.3 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 생성하려면 다음 단계를 수행하세요.

1

인덱스 정의는 다음 형식과 유사해야 합니다.

1{
2 "database": "<name-of-database>",
3 "collectionName": "<name-of-collection>",
4 "type": "vectorSearch",
5 "name": "<index-name>",
6 "fields":[
7 {
8 "type": "vector",
9 "path": "<field-to-index>",
10 "numDimensions": <number-of-dimensions>,
11 "similarity": "euclidean | cosine | dotProduct"
12 },
13 {
14 "type": "filter",
15 "path": "<field-to-index>"
16 },
17 ...
18 ]
19}

예시

vector-index.json이라는 파일을 만듭니다.

2

<name-of-database>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<name-of-collection>

인덱스를 생성하려는 컬렉션입니다.

<index-name>

인덱스의 이름입니다. 인덱스 이름을 생략하는 경우 Atlas Vector Search는 인덱스 이름을 vector_index로 지정합니다.

<number-of-dimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<field-to-index>

인덱싱할 벡터 및 필터 필드입니다.

예시

다음 인덱스 정의를 복사하여 vector-index.json 파일 에 붙여넣습니다. 다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드만 인덱싱합니다.

1{
2 "database": "sample_mflix",
3 "collectionName": "embedded_movies",
4 "type": "vectorSearch",
5 "name": "vector_index",
6 "fields": [
7 {
8 "type": "vector",
9 "path": "plot_embedding",
10 "numDimensions": 1536,
11 "similarity": "dotProduct"
12 }
13 ]
14}

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1{
2 "database": "sample_mflix",
3 "collectionName": "embedded_movies",
4 "type": "vectorSearch",
5 "name": "vector_index",
6 "fields":[
7 {
8 "type": "vector",
9 "path": "plot_embedding",
10 "numDimensions": 1536,
11 "similarity": "dotProduct"
12 },
13 {
14 "type": "filter",
15 "path": "genres"
16 },
17 {
18 "type": "filter",
19 "path": "year"
20 }
21 ]
22}
3
atlas clusters search indexes create --clusterName [cluster_name] --file [vector_index].json

명령에서 다음 자리 표시자 값을 바꿉니다.

  • cluster_name 은 인덱스를 만들려는 컬렉션이 포함된 Atlas 클러스터의 이름입니다.

  • vector_index - Atlas Vector Search 인덱스에 대한 인덱스 정의가 포함된 JSON 파일의 이름입니다.

예시

atlas clusters search indexes create --clusterName [cluster_name] --file vector-index.json

명령 구문 및 매개변수에 대한 자세한 내용은 Atlas CLI 문서에서 Atlas 클러스터 검색 인덱스 생성 명령을 참조하세요.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3

생성하려면 Create Search Index 클릭하세요.

4
Atlas Vector Search 인덱스 생성 스크린샷
클릭하여 확대
5
  1. Index Name 필드에 인덱스의 이름을 입력합니다.

    인덱스 이름은 인덱스 유형에 관계없이 네임스페이스 내에서 고유해야 합니다.

    예시

    예시 인덱스의 이름으로 vector_index를 입력합니다. 이 컬렉션에 vector_index라는 인덱스가 이미 있는 경우 인덱스에 다른 이름을 입력합니다.

  2. Database and Collection 섹션에서 데이터베이스 를 찾고 인덱스 를 생성할 컬렉션 을 선택합니다.

    예시

    Database and Collection 섹션에서 sample_mflix 데이터베이스를 찾고 embedded_movies 컬렉션을 선택합니다.

6

Atlas Vector Search 인덱스는 다음 예시와 유사합니다.

1{
2 "fields":[
3 {
4 "type": "vector",
5 "path": <field-to-index>,
6 "numDimensions": <number-of-dimensions>,
7 "similarity": "euclidean | cosine | dotProduct"
8 },
9 {
10 "type": "filter",
11 "path": "<field-to-index>"
12 },
13 ...
14 ]
15}

인덱스의 필드에 대해 자세히 알아보려면 벡터 검색을 위한 필드 인덱싱 방법을 참조하세요.

예시

다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드만 인덱싱합니다.

1{
2 "fields": [{
3 "type": "vector",
4 "path": "plot_embedding",
5 "numDimensions": 1536,
6 "similarity": "dotProduct"
7 }]
8}

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1{
2 "fields": [{
3 "type": "vector",
4 "path": "plot_embedding",
5 "numDimensions": 1536,
6 "similarity": "dotProduct"
7 },
8 {
9 "type": "filter",
10 "path": "genres"
11 },
12 {
13 "type": "filter",
14 "path": "year"
15 }]
16}
7
8

Atlas에서 인덱스가 작성 중임을 알려주는 모달 창이 표시됩니다.

9
10

새로 생성된 인덱스가 Atlas Search 탭에 나타납니다. 인덱스가 빌드되는 동안 Status 필드는 Build in Progress를 읽습니다. 인덱스 빌드가 완료되면 Status 필드에 Active가 표시됩니다.

참고

컬렉션이 클수록 인덱스를 생성하는 데 시간이 더 오래 걸립니다. 인덱스 빌드가 완료되면 이메일 알림을 받게 됩니다.

mongosh v2.1.2 이상을 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 만들려면 다음 단계를 수행하세요.

1

자세한 내용은 mongosh를 통한 연결을 참조하세요.

2

예시

use sample_mflix
switched to db sample_mflix
3

db.collection.createSearchIndex() 메서드의 구문은 다음과 같습니다.

1db.<collectionName>.createSearchIndex(
2 "<index-name>",
3 "vectorSearch", //index type
4 {
5 fields: [
6 {
7 "type": "vector",
8 "numDimensions": <number-of-dimensions>,
9 "path": "<field-to-index>",
10 "similarity": "euclidean | cosine | dotProduct"
11 },
12 {
13 "type": "filter",
14 "path": "<field-to-index>"
15 },
16 ...
17 ]
18 }
19);

예시

다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드만 인덱싱합니다.

1db.embedded_movies.createSearchIndex(
2 "vector_index",
3 "vectorSearch",
4 {
5 "fields": [
6 {
7 "type": "vector",
8 "path": "plot_embedding",
9 "numDimensions": 1536,
10 "similarity": "dotProduct"
11 }
12 ]
13 }
14);

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1db.embedded_movies.createSearchIndex(
2 "vector_index",
3 "vectorSearch",
4 {
5 "fields": [
6 {
7 "type": "vector",
8 "path": "plot_embedding",
9 "numDimensions": 1536,
10 "similarity": "dotProduct"
11 },
12 {
13 "type": "filter",
14 "path": "genres"
15 },
16 {
17 "type": "filter",
18 "path": "year"
19 }
20 ]
21 }
22);

MongoDB Go 드라이버 v1.16.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 생성하려면 다음 단계를 수행하세요.

1
1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7
8 "go.mongodb.org/mongo-driver/bson"
9 "go.mongodb.org/mongo-driver/mongo"
10 "go.mongodb.org/mongo-driver/mongo/options"
11)
12
13func main() {
14 ctx := context.Background()
15
16 // Replace the placeholder with your Atlas connection string
17 const uri = "<connectionString>"
18
19 // Connect to your Atlas cluster
20 clientOptions := options.Client().ApplyURI(uri)
21 client, err := mongo.Connect(ctx, clientOptions)
22 if err != nil {
23 log.Fatalf("failed to connect to the server: %v", err)
24 }
25 defer func() { _ = client.Disconnect(ctx) }()
26
27 // Set the namespace
28 coll := client.Database("<databaseName>").Collection("<collectionName>")
29
30 // Define the index details
31 type vectorDefinitionField struct {
32 Type string `bson:"type"`
33 Path string `bson:"path"`
34 NumDimensions int `bson:"numDimensions"`
35 Similarity string `bson:"similarity"`
36 }
37
38 type vectorDefinition struct {
39 Fields []vectorDefinitionField `bson:"fields"`
40 }
41
42 indexName := "<indexName>"
43 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch")
44
45 indexModel := mongo.SearchIndexModel{
46 Definition: vectorDefinition{
47 Fields: []vectorDefinitionField{{
48 Type: "vector",
49 Path: "<fieldToIndex>",
50 NumDimensions: <numberOfDimensions>,
51 Similarity: "euclidean | cosine | dotProduct"}},
52 },
53 Options: opts,
54 }
55
56 // Create the index
57 log.Println("Creating the index.")
58 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel)
59 if err != nil {
60 log.Fatalf("failed to create the search index: %v", err)
61 }
62
63 // Await the creation of the index.
64 log.Println("Polling to confirm successful index creation.")
65 log.Println("NOTE: This may take up to a minute.")
66 searchIndexes := coll.SearchIndexes()
67 var doc bson.Raw
68 for doc == nil {
69 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName))
70 if err != nil {
71 fmt.Errorf("failed to list search indexes: %w", err)
72 }
73
74 if !cursor.Next(ctx) {
75 break
76 }
77
78 name := cursor.Current.Lookup("name").StringValue()
79 queryable := cursor.Current.Lookup("queryable").Boolean()
80 if name == searchIndexName && queryable {
81 doc = cursor.Current
82 } else {
83 time.Sleep(5 * time.Second)
84 }
85 }
86
87 log.Println("Name of Index Created: " + searchIndexName)
88}

예시

vector-index.go이라는 파일을 만듭니다.

2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

예시

다음을 복사하여 vector-index.go 파일 에 붙여넣고 <connectionString> 자리 표시자 값을 바꿉니다. 다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드(plot_embedding)만 인덱싱합니다.

1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7 "time"
8
9 "go.mongodb.org/mongo-driver/bson"
10 "go.mongodb.org/mongo-driver/mongo"
11 "go.mongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(ctx, clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("sample_mflix").Collection("embedded_movies")
30
31 // Define the index details
32 type vectorDefinitionField struct {
33 Type string `bson:"type"`
34 Path string `bson:"path"`
35 NumDimensions int `bson:"numDimensions"`
36 Similarity string `bson:"similarity"`
37 }
38
39 type vectorDefinition struct {
40 Fields []vectorDefinitionField `bson:"fields"`
41 }
42
43 indexName := "vector_index"
44 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch")
45
46 indexModel := mongo.SearchIndexModel{
47 Definition: vectorDefinition{
48 Fields: []vectorDefinitionField{{
49 Type: "vector",
50 Path: "plot_embedding",
51 NumDimensions: 1536,
52 Similarity: "dotProduct"}},
53 },
54 Options: opts,
55 }
56
57 // Create the index
58 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel)
59 if err != nil {
60 log.Fatalf("failed to create the search index: %v", err)
61 }
62 log.Println("New search index named " + searchIndexName + " is building.")
63
64 // Await the creation of the index.
65 log.Println("Polling to check if the index is ready. This may take up to a minute.")
66 searchIndexes := coll.SearchIndexes()
67 var doc bson.Raw
68 for doc == nil {
69 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName))
70 if err != nil {
71 fmt.Errorf("failed to list search indexes: %w", err)
72 }
73
74 if !cursor.Next(ctx) {
75 break
76 }
77
78 name := cursor.Current.Lookup("name").StringValue()
79 queryable := cursor.Current.Lookup("queryable").Boolean()
80 if name == searchIndexName && queryable {
81 doc = cursor.Current
82 } else {
83 time.Sleep(5 * time.Second)
84 }
85 }
86
87 log.Println(searchIndexName + " is ready for querying.")
88}

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7 "time"
8
9 "go.mongodb.org/mongo-driver/bson"
10 "go.mongodb.org/mongo-driver/mongo"
11 "go.mongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(ctx, clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("sample_mflix").Collection("embedded_movies")
30 indexName := "vector_index"
31 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch")
32
33 type vectorDefinitionField struct {
34 Type string `bson:"type"`
35 Path string `bson:"path"`
36 NumDimensions int `bson:"numDimensions"`
37 Similarity string `bson:"similarity"`
38 }
39
40 type filterField struct {
41 Type string `bson:"type"`
42 Path string `bson:"path"`
43 }
44
45 type indexDefinition struct {
46 Fields []vectorDefinitionField `bson:"fields"`
47 }
48
49 vectorDefinition := vectorDefinitionField{
50 Type: "vector",
51 Path: "plot_embedding",
52 NumDimensions: 1536,
53 Similarity: "dotProduct"}
54 genreFilterDefinition := filterField{"filter", "genres"}
55 yearFilterDefinition := filterField{"filter", "year"}
56
57 indexModel := mongo.SearchIndexModel{
58 Definition: bson.D{{"fields", [3]interface{}{
59 vectorDefinition,
60 genreFilterDefinition,
61 yearFilterDefinition}}},
62 Options: opts,
63 }
64
65 // Create the index
66 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel)
67 if err != nil {
68 log.Fatalf("failed to create the search index: %v", err)
69 }
70 log.Println("New search index named " + searchIndexName + " is building.")
71
72 // Await the creation of the index.
73 log.Println("Polling to check if the index is ready. This may take up to a minute.")
74 searchIndexes := coll.SearchIndexes()
75 var doc bson.Raw
76 for doc == nil {
77 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName))
78 if err != nil {
79 fmt.Errorf("failed to list search indexes: %w", err)
80 }
81
82 if !cursor.Next(ctx) {
83 break
84 }
85
86 name := cursor.Current.Lookup("name").StringValue()
87 queryable := cursor.Current.Lookup("queryable").Boolean()
88 if name == searchIndexName && queryable {
89 doc = cursor.Current
90 } else {
91 time.Sleep(5 * time.Second)
92 }
93 }
94
95 log.Println(searchIndexName + " is ready for querying.")
96}
3
go run <file-name>.go

예시

go run vector-index.go

MongoDB Java 드라이버 v5.2.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 생성하려면 다음 단계를 수행하세요.

1
1import com.mongodb.client.ListSearchIndexesIterable;
2import com.mongodb.client.MongoClient;
3import com.mongodb.client.MongoClients;
4import com.mongodb.client.MongoCollection;
5import com.mongodb.client.MongoCursor;
6import com.mongodb.client.MongoDatabase;
7import com.mongodb.client.model.SearchIndexModel;
8import com.mongodb.client.model.SearchIndexType;
9import org.bson.Document;
10import org.bson.conversions.Bson;
11
12import java.util.Arrays;
13import java.util.Collections;
14import java.util.List;
15
16public class VectorIndex {
17
18 public static void main(String[] args) {
19
20 // Replace the placeholder with your Atlas connection string
21 String uri = "<connectionString>";
22
23 // Connect to your Atlas cluster
24 try (MongoClient mongoClient = MongoClients.create(uri)) {
25
26 // Set the namespace
27 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
28 MongoCollection<Document> collection = database.getCollection("<collectionName>");
29
30 // Define the index details
31 String indexName = "<indexName>";
32 Bson definition = new Document(
33 "fields",
34 Arrays.asList(
35 new Document("type", "vector")
36 .append("path", "<fieldToIndex>")
37 .append("numDimensions", <numberOfDimensions>)
38 .append("similarity", "euclidean | cosine | dotProduct"),
39 new Document("type", "filter")
40 .append("path", "<fieldToIndex>"),
41 ...
42 )
43 );
44
45 // Define the index model
46 SearchIndexModel indexModel = new SearchIndexModel(
47 indexName,
48 definition,
49 SearchIndexType.vectorSearch()
50 );
51
52 // Create the index
53 try {
54 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel));
55 System.out.println("New search index named " + result.get(0) + " is building.");
56 } catch (Exception e) {
57 throw new RuntimeException("Error creating index: " + e);
58 }
59
60
61 // Wait for Atlas to build the index
62 System.out.println("Polling to check if the index is ready. This may take up to a minute.");
63
64 ListSearchIndexesIterable<Document> searchIndexes = collection.listSearchIndexes();
65 Document doc = null;
66 while (doc == null) {
67 try (MongoCursor<Document> cursor = searchIndexes.iterator()) {
68 if (!cursor.hasNext()) {
69 break;
70 }
71 Document current = cursor.next();
72 String name = current.getString("name");
73 // When the index completes building, it becomes `queryable`
74 boolean queryable = current.getBoolean("queryable");
75 if (name.equals(indexName) && queryable) {
76 doc = current;
77 } else {
78 Thread.sleep(500);
79 }
80 } catch (Exception e) {
81 throw new RuntimeException("Failed to list search indexes: " + e);
82 mongoClient.close();
83 }
84 }
85 System.out.println(indexName + " is ready for querying.");
86
87 } catch (Exception e) {
88 throw new RuntimeException("Error connecting to MongoDB: " + e);
89 }
90 }
91}
2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

다음은 인덱스 정의 예시입니다.

  • Atlas Vector Search 인덱스에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다.

  • plot_embedding 필드를 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 만든 임베딩을 포함하는 벡터 임베딩 필드로 지정합니다.

  • 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

이 인덱스 정의는 벡터 임베딩 필드 (plot_embedding)만 인덱싱하여 벡터 검색을 수행합니다.

복사하여 만든 파일에 다음을 붙여넣고 <connectionString> 자리 표시자 값을 바꿉니다.

1import com.mongodb.client.ListSearchIndexesIterable;
2import com.mongodb.client.MongoClient;
3import com.mongodb.client.MongoClients;
4import com.mongodb.client.MongoCollection;
5import com.mongodb.client.MongoCursor;
6import com.mongodb.client.MongoDatabase;
7import com.mongodb.client.model.SearchIndexModel;
8import com.mongodb.client.model.SearchIndexType;
9import org.bson.Document;
10import org.bson.conversions.Bson;
11
12import java.util.Collections;
13import java.util.List;
14
15public class VectorIndex {
16
17 public static void main(String[] args) {
18
19 // Replace the placeholder with your Atlas connection string
20 String uri = "<connectionString>";
21
22 // Connect to your Atlas cluster
23 try (MongoClient mongoClient = MongoClients.create(uri)) {
24
25 // Set the namespace
26 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
27 MongoCollection<Document> collection = database.getCollection("embedded_movies");
28
29 // Define the index details
30 String indexName = "vector_index";
31 Bson definition = new Document(
32 "fields",
33 Collections.singletonList(
34 new Document("type", "vector")
35 .append("path", "plot_embedding")
36 .append("numDimensions", 1536)
37 .append("similarity", "dotProduct")));
38
39 // Define the index model
40 SearchIndexModel indexModel = new SearchIndexModel(
41 indexName,
42 definition,
43 SearchIndexType.vectorSearch());
44
45 // Create the index
46 try {
47 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel));
48 System.out.println("New search index named " + result.get(0) + " is building.");
49 } catch (Exception e) {
50 throw new RuntimeException("Error creating index: " + e);
51 }
52
53 // Wait for Atlas to build the index
54 System.out.println("Polling to check if the index is ready. This may take up to a minute.");
55
56 ListSearchIndexesIterable<Document> searchIndexes = collection.listSearchIndexes();
57 Document doc = null;
58 while (doc == null) {
59 try (MongoCursor<Document> cursor = searchIndexes.iterator()) {
60 if (!cursor.hasNext()) {
61 break;
62 }
63 Document current = cursor.next();
64 String name = current.getString("name");
65 // When the index completes building, it becomes `queryable`
66 boolean queryable = current.getBoolean("queryable");
67 if (name.equals(indexName) && queryable) {
68 doc = current;
69 } else {
70 Thread.sleep(500);
71 }
72 } catch (Exception e) {
73 throw new RuntimeException("Failed to list search indexes: " + e);
74 }
75 }
76 System.out.println(indexName + " is ready for querying.");
77
78 } catch (Exception e) {
79 throw new RuntimeException("Error connecting to MongoDB: " + e);
80 }
81 }
82}

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

복사하여 만든 파일에 다음을 붙여넣고 <connectionString> 자리 표시자 값을 바꿉니다.

1import com.mongodb.client.ListSearchIndexesIterable;
2import com.mongodb.client.MongoClient;
3import com.mongodb.client.MongoClients;
4import com.mongodb.client.MongoCollection;
5import com.mongodb.client.MongoCursor;
6import com.mongodb.client.MongoDatabase;
7import com.mongodb.client.model.SearchIndexModel;
8import com.mongodb.client.model.SearchIndexType;
9import org.bson.Document;
10import org.bson.conversions.Bson;
11
12import java.util.Arrays;
13import java.util.Collections;
14import java.util.List;
15
16public class VectorIndex {
17
18 public static void main(String[] args) {
19
20 // Replace the placeholder with your Atlas connection string
21 String uri = "<connectionString>";
22
23 // Connect to your Atlas cluster
24 try (MongoClient mongoClient = MongoClients.create(uri)) {
25
26 // Set the namespace
27 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
28 MongoCollection<Document> collection = database.getCollection("embedded_movies");
29
30 // Define the index details with the filter fields
31 String indexName = "vector_index";
32 Bson definition = new Document(
33 "fields",
34 Arrays.asList(
35 new Document("type", "vector")
36 .append("path", "plot_embedding")
37 .append("numDimensions", 1536)
38 .append("similarity", "dotProduct"),
39 new Document("type", "filter")
40 .append("path", "genres"),
41 new Document("type", "filter")
42 .append("path", "year")));
43
44 // Define the index model
45 SearchIndexModel indexModel = new SearchIndexModel(
46 indexName,
47 definition,
48 SearchIndexType.vectorSearch());
49
50 // Create the filtered index
51 try {
52 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel));
53 System.out.println("New search index named " + result.get(0) + " is building.");
54 } catch (Exception e) {
55 throw new RuntimeException("Error creating index: " + e);
56 }
57
58 // Wait for Atlas to build the index
59 System.out.println("Polling to check if the index is ready. This may take up to a minute.");
60
61 ListSearchIndexesIterable<Document> searchIndexes = collection.listSearchIndexes();
62 Document doc = null;
63 while (doc == null) {
64 try (MongoCursor<Document> cursor = searchIndexes.iterator()) {
65 if (!cursor.hasNext()) {
66 break;
67 }
68 Document current = cursor.next();
69 String name = current.getString("name");
70 // When the index completes building, it becomes `queryable`
71 boolean queryable = current.getBoolean("queryable");
72 if (name.equals(indexName) && queryable) {
73 doc = current;
74 } else {
75 Thread.sleep(500);
76 }
77 } catch (Exception e) {
78 throw new RuntimeException("Failed to list search indexes: " + e);
79 mongoClient.close();
80 }
81 }
82 System.out.println(indexName + " is ready for querying.");
83
84 } catch (Exception e) {
85 throw new RuntimeException("Error connecting to MongoDB: " + e);
86 }
87 }
88}
3

IDE에서 파일을 실행하여 인덱스를 만듭니다.

MongoDB Node 드라이버 v6.6.0 이상을 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 만들려면 다음 단계를 수행하세요.

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "<indexName>",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": <numberOfDimensions>,
22 "path": "<fieldToIndex>",
23 "similarity": "euclidean | cosine | dotProduct"
24 },
25 {
26 "type": "filter",
27 "path": "<fieldToIndex>"
28 },
29 ...
30 ]
31 }
32 }
33
34 // run the helper method
35 const result = await collection.createSearchIndex(index);
36 console.log(`New search index named ${result} is building.`);
37 // wait for the index to be ready to query
38 console.log("Polling to check if the index is ready. This may take up to a minute.")
39 let isQueryable = false;
40 while (!isQueryable) {
41 const cursor = collection.listSearchIndexes();
42 for await (const index of cursor) {
43 if (index.name === result) {
44 if (index.queryable) {
45 console.log(`${result} is ready for querying.`);
46 isQueryable = true;
47 } else {
48 await new Promise(resolve => setTimeout(resolve, 5000));
49 }
50 }
51 }
52 }
53 } finally {
54 await client.close();
55 }
56}
57run().catch(console.dir);

예시

vector-index.js이라는 파일을 만듭니다.

2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

예시

다음을 복사하여 vector-index.js 파일 에 붙여넣고 <connectionString> 자리 표시자 값을 바꿉니다. 다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드(plot_embedding)만 인덱싱합니다.

1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const collection = database.collection("embedded_movies");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "vector_index",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": 1536,
22 "path": "plot_embedding",
23 "similarity": "dotProduct"
24 }
25 ]
26 }
27 }
28
29 // run the helper method
30 const result = await collection.createSearchIndex(index);
31 console.log(`New search index named ${result} is building.`);
32
33 // wait for the index to be ready to query
34 console.log("Polling to check if the index is ready. This may take up to a minute.")
35 let isQueryable = false;
36 while (!isQueryable) {
37 const cursor = collection.listSearchIndexes();
38 for await (const index of cursor) {
39 if (index.name === result) {
40 if (index.queryable) {
41 console.log(`${result} is ready for querying.`);
42 isQueryable = true;
43 } else {
44 await new Promise(resolve => setTimeout(resolve, 5000));
45 }
46 }
47 }
48 }
49 } finally {
50 await client.close();
51 }
52}
53run().catch(console.dir);

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const collection = database.collection("embedded_movies");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "vector_index",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": 1536,
22 "path": "plot_embedding",
23 "similarity": "dotProduct"
24 },
25 {
26 "type": "filter",
27 "path": "genres"
28 },
29 {
30 "type": "filter",
31 "path": "year"
32 }
33 ]
34 }
35 }
36
37 // run the helper method
38 const result = await collection.createSearchIndex(index);
39 console.log(`New search index named ${result} is building.`);
40
41 // wait for the index to be ready to query
42 console.log("Polling to check if the index is ready. This may take up to a minute.")
43 let isQueryable = false;
44 while (!isQueryable) {
45 const cursor = collection.listSearchIndexes();
46 for await (const index of cursor) {
47 if (index.name === result) {
48 if (index.queryable) {
49 console.log(`${result} is ready for querying.`);
50 isQueryable = true;
51 } else {
52 await new Promise(resolve => setTimeout(resolve, 5000));
53 }
54 }
55 }
56 }
57 } finally {
58 await client.close();
59 }
60}
61run().catch(console.dir);
3
node <file-name>.js

예시

node vector_index.js

PyMongo 드라이버 v4.7 이상을 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 만들려면 다음 단계를 수행하세요.

1
1import pymongo
2from pymongo.mongo_client import MongoClient
3from pymongo.operations import SearchIndexModel
4
5# Connect to your Atlas deployment
6uri = "<connectionString>"
7client = MongoClient(uri)
8
9# Access your database and collection
10database = client["<databaseName>"]
11collection = database["<collectionName>"]
12
13# Create your index model, then create the search index
14search_index_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "numDimensions": <numberofDimensions>,
20 "path": "<fieldToIndex>",
21 "similarity": "euclidean | cosine | dotProduct"
22 },
23 {
24 "type": "filter",
25 "path": "<fieldToIndex>"
26 },
27 ...
28 ]
29 },
30 name="<indexName>",
31 type="vectorSearch",
32)
33
34result = collection.create_search_index(model=search_index_model)
35print("New search index named " + result + " is building.")
36
37# Wait for initial sync to complete
38print("Polling to check if the index is ready. This may take up to a minute.")
39predicate=None
40if predicate is None:
41 predicate = lambda index: index.get("queryable") is True
42
43while True:
44 indices = list(collection.list_search_indexes(result))
45 if len(indices) and predicate(indices[0]):
46 break
47 time.sleep(5)
48print(result + " is ready for querying.")
49
50client.close()

자세한 내용은 create_search_index() 메서드.

1from pymongo.mongo_client import MongoClient
2from pymongo.operations import SearchIndexModel
3
4def create_indexes():
5 # Connect to your Atlas deployment
6 uri = "<connectionString>"
7 client = MongoClient(uri)
8
9 # Access your database and collection
10 database = client["<databaseName>"]
11 collection = database["<collectionName>"]
12
13 # Create your index models and add them to an array
14 first_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "numDimensions": <numberOfDimensions>,
20 "path": "<fieldToIndex>",
21 "similarity": "euclidean | cosine | dotProduct"
22 },
23 {
24 "type": "filter",
25 "path": "<fieldToIndex>"
26 },
27 ...
28 ]
29 },
30 name="<indexName>",
31 type="vectorSearch",
32 )
33
34 second_model = SearchIndexModel(
35 definition={
36 "fields": [
37 {
38 "type": "vector",
39 "numDimensions": <numberOfDimensions>,
40 "path": "<fieldToIndex>",
41 "similarity": "euclidean | cosine | dotProduct"
42 },
43 {
44 "type": "filter",
45 "path": "<fieldToIndex>"
46 },
47 ...
48 ]
49 },
50 name="<index name>",
51 type="vectorSearch",
52 )
53
54 ...
55
56 idx_models = [first_model, second_model, ...]
57
58 # Create the search indexes
59 result = collection.create_search_indexes(models=idx_models)
60 print(result)
61
62 client.close()

자세한 내용은 create_search_indexes() 메서드.

예시

vector-index.py이라는 파일을 만듭니다.

2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

예시

다음을 복사하여 vector-index.py 에 붙여넣고 <connectionString> 자리 표시자 값을 바꿉니다. 다음 인덱스 정의는 Atlas Vector Search 인덱스 에서 plot_embedding 필드 를 vector 유형으로, genresyear 필드를 filter 유형으로 인덱싱합니다. plot_embedding 필드 에는 OpenAI의 text-embedding-ada-002 임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는 1536 벡터 차원을 지정하고 dotProduct 함수를 사용하여 유사성을 측정합니다.

다음 인덱스 정의는 벡터 Atlas Search를 수행하기 위해 벡터 임베딩 필드(plot_embedding)만 인덱싱합니다.

1from pymongo.mongo_client import MongoClient
2from pymongo.operations import SearchIndexModel
3import time
4
5# Connect to your Atlas deployment
6uri = "<connectionString>"
7client = MongoClient(uri)
8
9# Access your database and collection
10database = client["sample_mflix"]
11collection = database["embedded_movies"]
12
13# Create your index model, then create the search index
14search_index_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "path": "plot_embedding",
20 "numDimensions": 1536,
21 "similarity": "dotProduct"
22 }
23 ]
24 },
25 name="vector_index",
26 type="vectorSearch",
27)
28
29result = collection.create_search_index(model=search_index_model)
30print("New search index named " + result + " is building.")
31# Wait for initial sync to complete
32print("Polling to check if the index is ready. This may take up to a minute.")
33predicate=None
34if predicate is None:
35 predicate = lambda index: index.get("queryable") is True
36
37while True:
38 indices = list(collection.list_search_indexes(name))
39 if len(indices) and predicate(indices[0]):
40 break
41 time.sleep(5)
42print(result + " is ready for querying.")
43
44client.close()

이 인덱스 정의는 다음 필드를 인덱싱합니다:

  • 데이터를 사전 필터링하기 위한 문자열 필드(genres) 및 숫자 필드(year).

  • 사전 필터링된 데이터에 대해 벡터 Atlas Search를 수행하기 위한 벡터 임베딩 필드(plot_embedding)입니다.

1from pymongo.mongo_client import MongoClient
2from pymongo.operations import SearchIndexModel
3import time
4
5# Connect to your Atlas deployment
6uri = "<connectionString>"
7client = MongoClient(uri)
8
9# Access your database and collection
10database = client["sample_mflix"]
11collection = database["embedded_movies"]
12
13# Create your index model, then create the search index
14search_index_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "path": "plot_embedding",
20 "numDimensions": 1536,
21 "similarity": "dotProduct"
22 },
23 {
24 "type": "filter",
25 "path": "genres"
26 },
27 {
28 "type": "filter",
29 "path": "year"
30 }
31 ]
32 },
33 name="vector_index",
34 type="vectorSearch",
35)
36
37result = collection.create_search_index(model=search_index_model)
38print("New search index named " + result + " is building.")
39# Wait for initial sync to complete
40print("Polling to check if the index is ready. This may take up to a minute.")
41predicate=None
42if predicate is None:
43 predicate = lambda index: index.get("queryable") is True
44
45while True:
46 indices = list(collection.list_search_indexes(result))
47 if len(indices) and predicate(indices[0]):
48 break
49 time.sleep(5)
50print(result + " is ready for querying.")
51
52client.close()
3
python <file-name>.py

예시

python vector-index.py

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

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

참고

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


언어 선택 드롭다운 메뉴를 사용하여 이 섹션에 있는 예시의 언어를 설정합니다.


Atlas 관리 API를 사용하여 컬렉션의 모든 Atlas Vector Search 인덱스를 검색하려면 데이터베이스와 컬렉션 이름을 포함하여 Atlas 검색 indexes 엔드포인트에 GET 요청을 보내세요.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --include \
4 --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}"

엔드포인트의 구문과 파라미터에 대해 자세히 알아보려면 하나의 컬렉션에 대해 모든 Atlas Search 인덱스 반환을 참조하세요.

Atlas 관리 API를 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스 한 개를 조회하려면 조회할 인덱스의 고유 ID 또는 이름(4 행)과 함께 Atlas Search indexes 엔드포인트에 GET 요청을 보내세요.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --include \
4 --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId} | https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}/{indexName|indexId}"

엔드포인트의 구문 및 매개변수에 대한 자세한 내용은 이름으로 하나씩 가져오기ID로 하나씩 가져오기를 참조하세요.

Atlas CLI를 사용하여 컬렉션의 Atlas Vector Search 인덱스를 반환하려면 다음 단계를 수행하세요.

1

clusterName

Atlas 클러스터의 이름

db

인덱싱된 컬렉션이 포함된 Atlas 클러스터의 데이터베이스 이름입니다.

collection

데이터베이스에서 인덱싱된 컬렉션의 이름입니다.

projectId

프로젝트의 고유 식별자.

2
atlas clusters search indexes list --clusterName [cluster_name] --db <db-name> --collection <collection-name>

명령에서 다음 자리 표시자 값을 바꿉니다.

  • cluster-name - 인덱싱된 컬렉션을 포함하는 Atlas 클러스터의 이름입니다.

  • db-name - 인덱스를 조회하려는 컬렉션이 포함된 데이터베이스의 이름입니다.

  • collection-name - 인덱스를 검색하려는 컬렉션의 이름입니다.

명령 구문 및 매개변수에 대해 자세히 알아보려면 Atlas 클러스터 검색 인덱스 목록 명령에 대한 Atlas CLI 문서를 참조하세요.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

이 페이지에는 페이지의 인덱스에 대한 다음과 같은 세부 정보가 표시됩니다.

이름

인덱스를 식별하는 레이블입니다.

인덱스 유형

Atlas Search 또는 Atlas Vector Search 인덱스를 나타내는 레이블입니다. 값에는 다음이 포함됩니다.

  • search Atlas Search 인덱스에 대해서요.

  • vectorSearch Atlas Vector Search 검색 인덱스의 경우.

인덱스 필드

이 인덱스가 인덱싱하는 필드가 포함된 목록입니다.

상태

클러스터 의 프라이머리 노드 에 있는 인덱스 의 현재 상태 입니다. 유효한 값은 인덱스 상태를 참조하세요.

size

프라이머리 노드에 있는 인덱스의 크기입니다.

문서

collection의 총 문서 수 중 인덱스된 문서 수입니다.

작업

인덱스에 대해 수행할 수 있는 조치입니다. 다음을 수행할 수 있습니다.

유형의 인덱스에 대해서는 Search Tester UI 에서 쿼리를 실행 vectorSearch 수 없습니다.Query 버튼을 클릭하면 Atlas Vector Search 에 $vectorSearch Atlas UI 및 지원되는 다른 클라이언트를 사용하여 복사, 수정 및 실행 수 있는 샘플 가 표시됩니다.

mongosh를 사용하여 컬렉션의 Atlas Vector Search 인덱스를 보려면 다음 단계를 수행하세요.

1

자세한 내용은 mongosh를 통한 연결을 참조하세요.

2
3

db.collection.getSearchIndexes() 메서드의 구문은 다음과 같습니다.

1db.<collectionName>.getSearchIndexes( "<index-name>" );

MongoDB Go 드라이버 v1.16.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 보려면 다음 단계를 수행하세요.

1
1package main
2
3import (
4 "context"
5 "encoding/json"
6 "fmt"
7 "log"
8
9 "go.mongodb.org/mongo-driver/bson"
10 "go.mongodb.org/mongo-driver/mongo"
11 "go.mongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(ctx, clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("<databaseName>").Collection("<collectionName>")
30
31 // Specify the options for the index to retrieve
32 indexName := "<indexName>"
33 opts := options.SearchIndexes().SetName(indexName)
34
35 // Get the index
36 cursor, err := coll.SearchIndexes().List(ctx, opts)
37 if err != nil {
38 log.Fatalf("failed to get the index: %v", err)
39 }
40
41 // Print the index details to the console as JSON
42 var results []bson.M
43 if err := cursor.All(ctx, &results); err != nil {
44 log.Fatalf("failed to unmarshal results to bson: %v", err)
45 }
46 res, err := json.Marshal(results)
47 if err != nil {
48 log.Fatalf("failed to marshal results to json: %v", err)
49 }
50 fmt.Println(string(res))
51}
2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 검색하려는 컬렉션입니다.

<indexName>

특정 인덱스를 검색하려는 경우 인덱스의 이름입니다. 컬렉션의 모든 인덱스를 반환하려면 이 값을 생략합니다.

3
go run <file-name>.go

MongoDB Java 드라이버 v5.2.0 이상을 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 보려면 다음 단계를 수행하십시오.

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public class ViewVectorIndex {
8
9 public static void main(String[] args) {
10
11 // Replace the placeholder with your Atlas connection string
12 String uri = "<connectionString>";
13
14 // Connect to your Atlas cluster
15 try (MongoClient mongoClient = MongoClients.create(uri)) {
16
17 // Set the namespace
18 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
19 MongoCollection<Document> collection = database.getCollection("<collectionName>");
20
21 // Specify the options for the index to retrieve
22 String indexName = "<indexName>";
23
24 // Get the index and print details to the console as JSON
25 try {
26 Document listSearchIndex = collection.listSearchIndexes().name(indexName).first();
27 if (listSearchIndex != null) {
28 System.out.println("Index found: " + listSearchIndex.toJson());
29 } else {
30 System.out.println("Index not found.");
31 }
32 } catch (Exception e) {
33 throw new RuntimeException("Error finding index: " + e);
34 }
35
36 } catch (Exception e) {
37 throw new RuntimeException("Error connecting to MongoDB: " + e);
38 }
39 }
40}
2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 검색하려는 컬렉션입니다.

<indexName>

특정 인덱스를 검색하려는 경우 인덱스의 이름입니다. 컬렉션의 모든 인덱스를 반환하려면 이 값을 생략합니다.

3

IDE에서 파일을 실행하여 지정된 인덱스를 조회합니다.

MongoDB Node driver v6.6.0 이상을 사용하여 컬렉션의 Atlas 벡터 검색 인덱스를 보려면 다음 단계를 수행하세요.

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // run the helper method
14 const result = await collection.listSearchIndexes("<indexName>").toArray();
15 console.log(result);
16 } finally {
17 await client.close();
18 }
19}
20run().catch(console.dir);
2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 검색하려는 컬렉션입니다.

<indexName>

특정 인덱스를 검색하려는 경우 인덱스의 이름입니다. 컬렉션의 모든 인덱스를 반환하려면 이 값을 생략합니다.

3
node <file-name>.js

PyMongo 드라이버 v4.7 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 보려면 다음 단계를 수행하세요.

1
1from pymongo.mongo_client import MongoClient
2
3# Connect to your Atlas deployment
4uri = "<connectionString>"
5client = MongoClient(uri)
6
7# Access your database and collection
8database = client["<databaseName>"]
9collection = database["<collectionName>"]
10
11# Get a list of the collection's search indexes and print them
12cursor = collection.list_search_indexes()
13for index in cursor:
14 print(index)

자세한 내용은 list_search_indexes() 메서드를 참조하세요.

2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

컬렉션이 포함된 데이터베이스의 이름입니다.

<collectionName>

컬렉션의 이름입니다.

3
python <file-name>.py

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

중요

인덱스를 편집한 후, Atlas Vector Search는 인덱스를 다시 빌드합니다. 인덱스가 다시 빌드되는 동안, 이전 인덱스 정의를 사용하여 벡터 검색 쿼리를 계속 실행할 수 있습니다. 인덱스가 재구성되면 이전 인덱스는 자동으로 교체됩니다. 이 과정은 표준 Atlas Search 인덱스와 동일한 과정을 따릅니다.

자세한 내용은 Atlas Search 인덱스 생성 및 업데이트를 참조하세요.

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

참고

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


언어 선택 드롭다운 메뉴를 사용하여 인덱스 편집에 사용할 클라이언트를 선택합니다.


Atlas 관리 API를 사용하여 컬렉션의 Atlas Vector Search 인덱스를 편집하려면 편집할 인덱스의 고유 ID 또는 이름(4 행)과 함께 Atlas Search indexes 엔드포인트에 PATCH 요청을 보냅니다.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest --include \
2 --header "Accept: application/json" \
3 --header "Content-Type: application/json" \
4 --request PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId} | https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}/{indexName|indexId}" \
5 --data'
6 {
7 "database": "<name-of-database>",
8 "collectionName": "<name-of-collection>",
9 "type": "vectorSearch",
10 "name": "<index-name>",
11 "definition": {
12 "fields":[
13 {
14 "type": "vector",
15 "path": <field-to-index>,
16 "numDimensions": <number-of-dimensions>,
17 "similarity": "euclidean | cosine | dotProduct"
18 },
19 {
20 "type": "filter",
21 "path": "<field-to-index>"
22 },
23 ...
24 }
25 ]
26 }'

엔드포인트의 구문 및 매개변수에 대한 자세한 내용은 이름으로 하나씩 업데이트ID로 하나씩 업데이트를 참조하세요.

Atlas CLI를 사용하여 컬렉션의 Atlas Vector Search 인덱스를 편집하려면 다음 단계를 수행하세요.

1

인덱스 정의는 다음 형식과 유사해야 합니다.

1{
2 "database": "<name-of-database>",
3 "collectionName": "<name-of-collection>",
4 "type": "vectorSearch",
5 "name": "<index-name>",
6 "fields":[
7 {
8 "type": "vector",
9 "path": "<field-to-index>",
10 "numDimensions": <number-of-dimensions>,
11 "similarity": "euclidean | cosine | dotProduct"
12 },
13 {
14 "type": "filter",
15 "path": "<field-to-index>"
16 },
17 ...
18 ]
19}
2

<name-of-database>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<name-of-collection>

인덱스를 생성하려는 컬렉션입니다.

<index-name>

인덱스의 이름입니다. 인덱스 이름을 생략하는 경우 Atlas Vector Search는 인덱스 이름을 vector_index로 지정합니다.

<number-of-dimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<field-to-index>

인덱싱할 벡터 및 필터 필드입니다.

3
atlas clusters search indexes update <indexId> --clusterName [cluster_name] --file [vector-_index].json

명령에서 다음 자리 표시자 값을 바꿉니다.

  • cluster_name - 업데이트하려는 인덱스를 포함하는 컬렉션이 있는 Atlas 클러스터의 이름입니다.

  • vector_index - Atlas Vector Search 인덱스에 대한 수정된 인덱스 정의를 포함하는 JSON 파일의 이름입니다.

명령 구문과 매개 변수에 관한 자세한 내용은 Atlas CLI 설명서의 Atlas 클러스터 검색 인덱스 업데이트를 참조하세요.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3
  1. 편집할 vectorSearch 유형 인덱스를 찾습니다.

  2. 해당 인덱스의 Actions 드롭다운에서 Edit Index를 클릭합니다.

  3. 현재 구성 설정을 검토하고 필요에 따라 편집합니다.

    Atlas Vector Search 인덱스의 필드에 대해 자세히 알아보려면 벡터 검색을 위한 필드 인덱싱 방법을 참조하세요.

  4. Save를 클릭하여 변경 사항을 적용하세요.

인덱스의 상태가 Active에서 Building으로 변경됩니다. 이 상태에서는 업데이트된 인덱스를 사용할 준비가 될 때까지 Atlas Vector Search가 이전 인덱스를 삭제하지 않으므로, 이전 인덱스를 계속 사용할 수 있습니다. 상태가 Active로 돌아가면 수정된 인덱스를 사용할 준비가 된 것입니다.

mongosh를 사용하여 컬렉션의 Atlas Vector Search 인덱스를 편집하려면 다음 단계를 수행하세요.

1

자세한 내용은 mongosh를 통한 연결을 참조하세요.

2
3

db.collection.updateSearchIndex() 메서드의 구문은 다음과 같습니다.

1db.<collectionName>.updateSearchIndex(
2 "<index-name>",
3 {
4 fields: [
5 {
6 "type": "vector",
7 "numDimensions": <number-of-dimensions>,
8 "path": "<field-to-index>",
9 "similarity": "euclidean | cosine | dotProduct"
10 },
11 {
12 "type": "filter",
13 "path": "<field-to-index>"
14 },
15 ...
16 ]
17 }
18);

MongoDB Go 드라이버 v1.16.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 업데이트하려면 다음 단계를 수행하세요.

1
1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 ctx := context.Background()
14
15 // Replace the placeholder with your Atlas connection string
16 const uri = "<connection-string>"
17
18 // Connect to your Atlas cluster
19 clientOptions := options.Client().ApplyURI(uri)
20 client, err := mongo.Connect(ctx, clientOptions)
21 if err != nil {
22 log.Fatalf("failed to connect to the server: %v", err)
23 }
24 defer func() { _ = client.Disconnect(ctx) }()
25
26 // Set the namespace
27 coll := client.Database("<databaseName>").Collection("<collectionName>")
28 indexName := "<indexName>"
29
30 type vectorDefinitionField struct {
31 Type string `bson:"type"`
32 Path string `bson:"path"`
33 NumDimensions int `bson:"numDimensions"`
34 Similarity string `bson:"similarity"`
35 }
36
37 type vectorDefinition struct {
38 Fields []vectorDefinitionField `bson:"fields"`
39 }
40
41 definition := vectorDefinition{
42 Fields: []vectorDefinitionField{{
43 Type: "vector",
44 Path: "<fieldToIndex>",
45 NumDimensions: <numberOfDimensions>,
46 Similarity: "euclidean | cosine | dotProduct"}},
47 }
48 err = coll.SearchIndexes().UpdateOne(ctx, indexName, definition)
49
50 if err != nil {
51 log.Fatalf("failed to update the index: %v", err)
52 }
53
54 fmt.Println("Successfully updated the search index")
55}
2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

3
go run <file-name>.go

MongoDB Java 드라이버 v5.2.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 편집하려면 다음 단계를 수행하세요.

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6import org.bson.conversions.Bson;
7
8import java.util.Collections;
9
10public class EditVectorIndex {
11
12 public static void main(String[] args) {
13
14 // Replace the placeholder with your Atlas connection string
15 String uri = "<connectionString>";
16
17 // Connect to your Atlas cluster
18 try (MongoClient mongoClient = MongoClients.create(uri)) {
19
20 // Set the namespace
21 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
22 MongoCollection<Document> collection = database.getCollection("<collectionName>");
23
24 // Define the index changes
25 String indexName = "<indexName>";
26 Bson definition = new Document(
27 "fields",
28 Collections.singletonList(
29 new Document("type", "vector")
30 .append("path", "<fieldToIndex>")
31 .append("numDimensions", <numberOfDimensions>)
32 .append("similarity", "euclidean | cosine | dotProduct")
33 )
34 );
35
36 // Update the index
37 try {
38 collection.updateSearchIndex(indexName, definition);
39 System.out.println("Successfully updated the index");
40 } catch (Exception e) {
41 throw new RuntimeException("Error creating index: " + e);
42 mongoClient.close();
43 }
44
45 } catch (Exception e) {
46 throw new RuntimeException("Error connecting to MongoDB: " + e);
47 }
48 }
49}
2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

3

IDE에서 파일을 실행하여 변경 사항으로 인덱스를 업데이트합니다.

MongoDB Node 드라이버 v6.6.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 업데이트하려면 다음 단계를 수행하세요.

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connection-string>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // define your Atlas Search index
14 const index = {
15 name: "<indexName>",
16 type: "vectorSearch",
17 //updated search index definition
18 definition: {
19 "fields": [
20 {
21 "type": "vector",
22 "numDimensions": <numberOfDimensions>,
23 "path": "<field-to-index>",
24 "similarity": "euclidean | cosine | dotProduct"
25 },
26 {
27 "type": "filter",
28 "path": "<fieldToIndex>"
29 },
30 ...
31 ]
32 }
33 }
34
35 // run the helper method
36 await collection.updateSearchIndex("<index-name>", index);
37 } finally {
38 await client.close();
39 }
40}
41run().catch(console.dir);
2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하면 Atlas Search에서 인덱스 이름을 vector_index 으로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

3
node <file-name>.js

PyMongo 드라이버 v4.7 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 업데이트하려면 다음 단계를 수행하세요.

1
1from pymongo.mongo_client import MongoClient
2
3# Connect to your Atlas deployment
4uri = "<connectionString>"
5client = MongoClient(uri)
6
7# Access your database and collection
8database = client["<databaseName>"]
9collection = database["<collectionName>"]
10
11definition = {
12 "fields": [
13 {
14 "type": "vector",
15 "numDimensions": <numberofDimensions>,
16 "path": "<fieldToIndex>",
17 "similarity": "euclidean | cosine | dotProduct"
18 },
19 {
20 "type": "filter",
21 "path": "<fieldToIndex>"
22 },
23 ...
24 ]
25}
26
27# Update your search index
28collection.update_search_index("<indexName>", definition)

자세한 내용은 update_search_index() 메서드를 참조하세요.

2

<connectionString>

Atlas 연결 string. 자세한 내용은 드라이버를 통한 연결을 참조하세요.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스 이름. 인덱스 이름을 생략하는 경우 Atlas Search는 인덱스 이름을 vector_index로 지정합니다.

<numberOfDimensions>

Atlas Vector Search가 인덱스 타임 및 쿼리 타임에 시행하는 벡터 차원의 수입니다.

<fieldToIndex>

인덱싱할 벡터 및 필터 필드입니다.

3
python <file-name>.py

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

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

참고

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


언어 선택 드롭다운 메뉴를 사용하여 인덱스를 삭제하는 데 사용할 클라이언트를 선택합니다.


Atlas 관리 API를 사용해 컬렉션에 대한 Atlas Vector Search 인덱스를 삭제하려면 삭제할 인덱스의 고유 ID 또는 이름으로 Atlas Search indexes 엔드포인트에 DELETE 요청을 전송하세요.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --include \
4 --request DELETE "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId} | https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}/{indexName|indexId}"

엔드포인트의 구문 및 매개변수에 대해 자세히 알아보려면 이름으로 1개의 검색 인덱스 제거ID로 1개의 검색 인덱스 제거를 참조하세요.

Atlas CLI를 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 삭제하려면 다음 단계를 수행합니다.

1

<indexId>

삭제할 인덱스의 고유 식별자입니다.

<clusterName>

Atlas 클러스터의 이름

<projectId>

프로젝트의 고유 식별자.

2
atlas clusters search indexes delete <indexId> [options]

명령에서 indexId 자리 표시자 값을 삭제할 인덱스의 고유 식별자로 바꿉니다.

명령 구문 및 매개변수에 대한 자세한 내용은 Atlas CLI 문서에서 Atlas 클러스터 검색 인덱스 삭제 명령을 참조하세요.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3
  1. 삭제할 vectorSearch 유형 인덱스를 찾습니다.

  2. 해당 인덱스의 Actions 드롭다운에서 Delete Index를 클릭합니다.

  3. 확인 창에서 Drop Index을(를) 클릭합니다.

mongosh를 사용하여 컬렉션의 Atlas Vector Search 인덱스를 삭제하려면 다음 단계를 수행하세요.

1

자세한 내용은 mongosh를 통한 연결을 참조하세요.

2
3

db.collection.dropSearchIndex() 메서드의 구문은 다음과 같습니다.

1db.<collectionName>.dropSearchIndex( "<index-name>" );

MongoDB Go 드라이버 v1.16.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 삭제하려면 다음 단계를 수행하세요.

1
1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 ctx := context.Background()
14
15 // Replace the placeholder with your Atlas connection string
16 const uri = "<connectionString>"
17
18 // Connect to your Atlas cluster
19 clientOptions := options.Client().ApplyURI(uri)
20 client, err := mongo.Connect(ctx, clientOptions)
21 if err != nil {
22 log.Fatalf("failed to connect to the server: %v", err)
23 }
24 defer func() { _ = client.Disconnect(ctx) }()
25
26 // Set the namespace
27 coll := client.Database("<databaseName>").Collection("<collectionName>")
28 indexName := "<indexName>"
29
30 err = coll.SearchIndexes().DropOne(ctx, indexName)
31 if err != nil {
32 log.Fatalf("failed to delete the index: %v", err)
33 }
34
35 fmt.Println("Successfully deleted the Vector Search index")
36}
2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하는 경우 Atlas Search는 인덱스 이름을 vector_index으로 지정합니다.

3
go run <file-name>.go

MongoDB Java 드라이버 v5.2.0 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 삭제하려면 다음 단계를 수행하세요.

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public class DeleteIndex {
8
9 public static void main(String[] args) {
10
11 // Replace the placeholder with your Atlas connection string
12 String uri = "<connectionString>";
13
14 // Connect to your Atlas cluster
15 try (MongoClient mongoClient = MongoClients.create(uri)) {
16
17 // Set the namespace
18 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
19 MongoCollection<Document> collection = database.getCollection("<collectionName>");
20
21 // Specify the index to delete
22 String indexName = "<indexName>";
23
24 try {
25 collection.dropSearchIndex(indexName);
26 } catch (Exception e) {
27 throw new RuntimeException("Error deleting index: " + e);
28 }
29
30 } catch (Exception e) {
31 throw new RuntimeException("Error connecting to MongoDB: " + e);
32 }
33 }
34}
2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하는 경우 Atlas Search는 인덱스 이름을 vector_index으로 지정합니다.

3

IDE에서 파일을 실행하여 지정된 인덱스를 삭제합니다.

MongoDB Node 드라이버 v6.6.0 이상을 사용하여 컬렉션에 대한 Atlas Vector Search 인덱스를 삭제하려면 다음 단계를 수행하세요.

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // run the helper method
14 await collection.dropSearchIndex("<indexName>");
15
16 } finally {
17 await client.close();
18 }
19}
20run().catch(console.dir);
2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

인덱스를 생성하려는 컬렉션이 포함된 데이터베이스입니다.

<collectionName>

인덱스를 생성하려는 컬렉션입니다.

<indexName>

인덱스의 이름입니다. 인덱스 이름을 생략하는 경우 Atlas Search는 인덱스 이름을 vector_index으로 지정합니다.

3
node <file-name>.js

PyMongo 드라이버 v4.7 이상을 사용하여 컬렉션의 Atlas Vector Search 인덱스를 삭제하려면 다음 단계를 수행하세요.

1
1from pymongo.mongo_client import MongoClient
2
3# Connect to your Atlas deployment
4uri = "<connectionString>"
5client = MongoClient(uri)
6
7# Access your database and collection
8database = client["<databaseName>"]
9collection = database["<collectionName>"]
10
11# Delete your search index
12collection.drop_search_index("<indexName>")

자세한 내용은 drop_search_index() 메서드를 참조하세요.

2

<connectionString>

Atlas 연결 문자열입니다. 자세한 사항은 드라이버를 통해 연결을 참조하십시오.

<databaseName>

컬렉션이 포함된 데이터베이스의 이름입니다.

<collectionName>

컬렉션의 이름입니다.

<indexName>

삭제할 인덱스의 이름입니다.

3
python <file-name>.py

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

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

상태
설명

시작되지 않음

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

초기 동기화

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

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

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

활성

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

복구 중

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

실패하였습니다.

Atlas에서 인덱스를 작성할 수 없습니다. View status details 모달 창의 오류를 사용하여 문제를 해결하세요. 자세한 내용은 Atlas Search 문제 해결을 참조하세요.

삭제 진행 중

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

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