검색 인덱스 만들기
이 페이지의 내용
정의
버전 7.0에 새로 추가됨: (6.0.7부터 사용 가능)
지정된 컬렉션에 하나 이상의 Atlas Search 인덱스 또는 Vector Atlas Search 인덱스 를 만듭니다.
mongosh
메서드 db.collection.createSearchIndex()
는 createSearchIndexes
데이터베이스 명령 을 감싸는 래퍼를 제공합니다.
중요
이 명령은 MongoDB Atlas 에서 호스팅되는 배포서버 에서만 실행 수 있으며 서버리스 인스턴스 에서는 지원되지 않습니다 .
구문
명령 구문:
db.runCommand( { createSearchIndexes: "<collection name>", indexes: [ { name: "<index name>", type: "<search index type>", definition: { /* search index definition fields */ } }, ... ] } )
명령 필드
createSearchIndexes
명령은 다음 필드를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
createSearchIndexes | 문자열 | 필수 사항 | 검색 인덱스를 생성할 컬렉션의 이름입니다. |
indexes | 배열 | 필수 사항 | 생성할 인덱스를 설명하는 문서의 배열입니다. |
indexes.name | 문자열 | 옵션 | 생성할 검색 인덱스의 이름입니다. 단일 collection에 동일한 이름으로 여러 인덱스를 생성할 수 없습니다.
|
indexes.type | 문자열 | 옵션 | 생성할 검색 인덱스 의 유형입니다. 다음 중 하나를 지정할 수 있습니다.
|
indexes.definition | 문서 | 필수 사항 | 생성할 인덱스 를 설명하는 문서입니다. |
인덱스 정의 구문 검색
검색 인덱스 정의에는 다음 필드가 사용됩니다.
{ analyzer: "<analyzer-for-index>", searchAnalyzer: "<analyzer-for-query>", mappings: { dynamic: <boolean>, fields: { <field-definition> } }, analyzers: [ <custom-analyzer> ], storedSource: <boolean> | { <stored-source-definition> }, synonyms: [ { name: "<synonym-mapping-name>", source: { collection: "<source-collection-name>" }, analyzer: "<synonym-mapping-analyzer>" } ] }
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
analyzer | 문자열 | 옵션 | 인덱싱할 때 필드에 적용할 분석기 를 지정합니다.string 이 필드를 생략하면 인덱스는 표준 분석기를 사용합니다. |
searchAnalyzer | 문자열 | 옵션 | 텍스트를 검색하기 전에 쿼리 텍스트에 적용할 분석기 를 지정합니다. 이 필드를 생략하면 인덱스는
|
mappings | 객체 | 필수 사항 | 이 인덱스에 대해 서로 다른 경로에 있는 필드를 인덱싱하는 방법을 지정합니다. |
mappings.dynamic | 부울 | 옵션 | 이 인덱스에 대한 동적 필드 매핑을 활성화하거나 비활성화합니다.
생략하는 경우 기본값은 |
mappings.fields | 문서 | 조건부 | 동적 매핑이 비활성화된 경우에만 필요합니다. 인덱싱할 필드를 지정합니다. 자세히 알아보려면 필드 매핑 정의를 참조하세요. |
analyzers | 배열 | 옵션 | 이 인덱스에서 사용할 사용자 지정 분석기 를 지정합니다. |
storedSource | 부울 또는 저장된 소스 정의 | 옵션 | 반환 된 저장 소스 옵션을 사용하여 수행된 쿼리에 대해 저장할 문서 필드를 지정합니다. Atlas Search에는 모든 데이터 유형 의 필드를 저장할 수 있습니다.
생략하는 경우 기본값은 자세히 알아보려면 Atlas Search 인덱스에서 저장된 소스 필드 정의를 참조하세요. |
synonyms | 옵션 | 인덱스 에 사용할 동의어 매핑을 지정합니다. 동의어를 구성하면 동일하거나 유사한 의미를 가진 단어를 인덱스 하고 검색 할 수 있습니다. 자세히 알아보려면 Atlas Search 인덱스에서 동의어 매핑 정의를 참조하세요. |
벡터 검색 인덱스 정의 구문
벡터 검색 인덱스 정의에는 다음 필드가 사용됩니다.
{ "fields": [ { "type": "vector" | "filter", "path": "<field-to-index>", "numDimensions": <number-of-dimensions>, "similarity": "euclidean" | "cosine" | "dotProduct" } ] }
벡터 검색 인덱스 정의 필드에 대한 설명은 벡터 검색 을 위해 필드를 인덱싱하는 방법을 참조하세요.
행동
createSearchIndexes
명령은 인덱스 빌드를 Atlas Triggers합니다. 명령에서 응답을 받은 시점과 인덱스가 준비되는 시점 사이에는 지연이 있을 수 있습니다.
검색 인덱스의 상태를 확인하려면 $listSearchIndexes
집계 단계를 사용합니다.
액세스 제어
배포에서 액세스 제어를 적용하는 경우 createSearchIndexes
명령을 실행하는 사용자에게는 collection 또는 데이터베이스에 대한 createSearchIndexes
권한 조치가 있어야 합니다.
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
기본 제공 readWrite
역할은 createSearchIndexes
권한을 제공합니다. 다음 예에서는 accountUser01
에 products
데이터베이스에 대한 readWrite
역할을 부여합니다.
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
출력
createSearchIndexes
명령 출력은 다음과 유사합니다.
{ ok: 1, indexesCreated: [ { id: "<index Id>", name: "<index name>" } ] }
중요
응답 필드 ok: 1
는 명령이 성공했음을 나타냅니다. 그러나 응답을 받은 시점과 생성된 인덱스를 사용할 준비가 된 시점 사이에 지연이 있을 수 있습니다.
검색 인덱스의 상태를 확인하려면 $listSearchIndexes
집계 단계를 사용합니다.
예시
모든 필드에 검색 인덱스 만들기
다음 예에서는 contacts
collection에 searchIndex01
라는 검색 인덱스를 만듭니다.
db.runCommand( { createSearchIndexes: "contacts", indexes: [ { name: "searchIndex01", definition: { mappings: { dynamic: true } } } ] } )
인덱스 정의는 mappings: { dynamic: true }
을 지정하며, 이는 인덱스가 컬렉션에서 지원되는 데이터 유형을 가진 모든 필드를 포함함을 의미합니다.
언어 분석기로 검색 인덱스 만들기
언어 분석기는 인덱스할 만큼 중요하지 않은 단어인 중지 단어를 도입합니다.
다음 예제에서는 cars
collection에 frenchIndex01
라는 검색 인덱스를 만들고 fr
필드에 lucene.french
분석기를 지정합니다.
db.runCommand( { createSearchIndexes: "cars", indexes: [ { name: "frenchIndex01", definition: { mappings: { fields: { subject: { fields: { fr: { analyzer: "lucene.french", type: "string" } }, type: "document" } } } } } ] } )
언어 분석기에 대해 자세히 알아보려면 언어 분석기를 참조하세요 .
다중 검색 인덱스 만들기
다음 명령은 products
collection searchIndex02
및 searchIndex03
에 두 개의 검색 인덱스를 생성합니다.
db.runCommand( { createSearchIndexes: "products", indexes: [ { name: "searchIndex02", definition: { mappings: { fields: { title: { type: "string", analyzer: "lucene.simple" } } } } }, { name: "searchIndex03", definition: { mappings: { dynamic: true } } } ] } )
searchIndex02
title
필드에서 간단한 분석기 를 사용합니다. 단순 분석기는 공백, 구두점 또는 숫자와 같은 문자가 아닌 문자를 기반으로 텍스트를 검색 가능한 용어로 나눕니다.
searchIndex03
동적 필드 매핑을 사용하므로 인덱스에는 지원되는 데이터 유형이 있는 컬렉션의 모든 필드가 포함됩니다.
벡터 검색 인덱스 만들기
다음 예에서는 movies
컬렉션에 vectorSearchIndex01
이라는 벡터 Atlas Search 인덱스를 만듭니다.
db.runCommand( { createSearchIndexes: "movies", indexes: [ { name: "vectorSearchIndex01", type: "vectorSearch", definition: { fields: [ { type: "vector", numDimensions: 1, path: "genre", similarity: "cosine" } ] } } ] } )
벡터 Atlas Search 인덱스는 하나의 차원을 포함하며 genre
필드를 인덱싱합니다.