MongoDB 검색 인덱스 생성할 때 다음 메서드를 사용하여 인덱스 할 필드를 지정할 수 있습니다.
동적 매핑: MongoDB Search를 활성화하여 기본값 또는 구성된 필드 유형 설정하다 (
typeSet)을 기반으로 모든 필드를 자동으로 인덱스 .정적 매핑: 인덱스 할 필드를 지정할 수 있습니다.
데이터 유형 제한
기본값 으로 MongoDB Search는 복제본 세트 또는 단일 샤드 에서 인덱스 객체가 2.1 개보다 큰 인덱스에 대한 변경 사항 복제를 중지하며, 여기서 각 인덱스된 문서 또는 중첩된 embeddedDocument 는 단일 객체 로 계산됩니다. 즉, 인덱스 를 계속 쿼리할 수 있지만 오래된 결과가 나올 수 있습니다.
인덱스 객체 최상위 문서 또는 내장된 문서 인 2.1 억을 초과할 수 있는 필드를 인덱스 하려는 경우 numPartitions 인덱스 옵션을 사용하여 인덱스를 분할합니다(검색 노드 배포서버에서만 지원됨). 또는 클러스터를 샤드.
필드 이름 시작 부분에 달러($) 기호가 포함된 필드는 인덱싱할 수 없습니다.
구문
다음 구문은 MongoDB Search가 동적 및 정적 매핑을 사용하여 필드를 인덱스 하도록 활성화하는 방법을 보여줍니다. 동적 및 정적 매핑에 대해 자세히 학습 동적 및 정적 매핑을 참조하세요.
1 { 2 "mappings": { 3 "dynamic": true|false | { 4 "typeSet": "<typeset-name>" 5 }, 6 "fields": { 7 "<field-name>": { 8 "type": "<field-type>", 9 ... 10 }, 11 ... 12 } 13 }, 14 "typeSets": [ 15 { 16 "name": "<typeset-name>", 17 "types": [ 18 { 19 "type": "<field-type>", 20 ... 21 }, 22 ... 23 ] 24 }, 25 ... 26 ] 27 }
동적 및 정적 매핑
다음을 사용하여 MongoDB 검색하다를 구성할 수 있습니다.
기본값 또는 구성된 유형 설정하다 (
typeSet)을 기반으로 필드를 자동으로 인덱스 하는 동적 매핑지정된 필드만 인덱스 하는 정적 매핑
정적 매핑과 함께 동적 매핑을 사용할 수도 있습니다. 정적 매핑은 동적 매핑 구성을 재정의합니다.
동적 매핑
MongoDB Search 동적 매핑을 사용하면 데이터의 필드를 자동으로 재귀적으로 인덱스 하도록 MongoDB Search를 구성할 수 있습니다. 필드는 기본값 유형을 설정하여 기반으로 하거나 typeSet를 구성하여 인덱싱할 수 있습니다.
동적 매핑을 활성화 하거나 구성할 수 있습니다.
루트
mappings수준에서 전체 문서 에 적용 .[권장]
document내에서 지정된 객체 에 적용 필드 유형입니다.[권장]
embeddedDocuments필드 내에서 요소별 쿼리 비교가 필요한 지정된 객체 배열에 적용 필드 유형($elemMatch과 유사)입니다.
참고
모범 사례
동적 매핑으로 인해 많은 수의 고유 필드가 인덱싱 될 수 있으며, 이로 인해 디스크 공간을 더 많이 차지하고 성능이 저하될 수 있습니다. 정기적으로 변경되거나 알 수 없는 필드를 인덱스 해야 하는 경우에만 동적 매핑을 사용합니다. 상위 문서 수준이 아닌 문서 내에서 항상 동적 매핑을 사용합니다.
동적 매핑을 사용하여 데이터를 인덱스 하는 경우:
또한 MongoDB Search는 데이터의
document객체 에서typeSet가 지원하는 모든 중첩 필드를 동적으로 인덱싱합니다.필드 에 다형성 데이터가 포함된 경우, MongoDB 검색은 인덱스 에 사용된
typeSet에서 지원하는 모든 유형으로 필드 를 자동으로 인덱싱합니다. 필드typeSet에서 지원하지 않는 유형의 데이터가 포함되어 있는 경우, MongoDB Search는 해당 데이터를 인덱스 하지 않습니다.
기본값 활성화 typeSet
MongoDB Search는 dynamic 이 true로 설정하다 경우 기본값 typeSet 를 사용합니다. 기본값 typeSet에서 MongoDB Search는 BSON 유형을 MongoDB Search 필드 유형으로 인덱싱합니다. 다음 표는 기본값 를 사용할 때 MongoDB 검색하다가 MongoDB 검색하다 필드 유형으로 자동으로 인덱스하는 BSON 유형을 typeSet 보여줍니다. 또한 MongoDB Search는 다음 BSON 타입이 배열과 객체 내에 포함된 경우 자동으로 인덱스합니다.
다음은 동적 매핑에 대한 기본값 유형 집합을 활성화하는 구문입니다.
1 { 2 "mappings": { 3 "dynamic": true | { 4 "typeSet": "<typset-name>" 5 }, 6 "typeSets": [ 7 { 8 "name": "<typset-name>", 9 "types": [ 10 { 11 "type": "<field-type>" 12 }, 13 ... 14 ] 15 }, 16 ... 17 ] 18 } 19 }
기본값 typeSet을 사용하여 모든 필드를 인덱싱 보여주는 인덱스 예제는 동적 매핑 예제를 참조하세요.
configurea typeSet
중요
구성 가능한 동적 매핑이 Preview에 있습니다. 기능 및 해당 설명서는 미리 보기 기간에 언제든지 변경될 수 있습니다. 자세히 학습 미리 보기 기능을 참조하세요.
typeSet을 구성하여 동적으로 인덱싱할 MongoDB Search 필드 유형을 지정합니다. 모든 BSON 유형을 document, embeddedDocuments, vector 또는 더 이상 사용되지 않는 필드 유형을 제외한 모든 MongoDB Search 필드 유형으로 자동으로 인덱싱되도록 구성할 수 있습니다.
typeSet 의 구문은 다음과 같습니다.
1 { 2 "mappings": { 3 "dynamic": { 4 "typeSet": "<typeset-name>" 5 }, 6 "fields": { 7 "<field-name>": { 8 "type": "<field-type>", 9 ... 10 }, 11 ... 12 } 13 }, 14 "typeSets": [ 15 { 16 "name": "<typeset-name>", 17 "types": [ 18 { 19 "type": "<field-type>" 20 }, 21 ... 22 ] 23 }, 24 ... 25 ] 26 }
typeSet를 구성하기 전에 다음 사항을 고려하세요.
동일한
typeSet객체 에서 동일한 필드 유형을 여러 번 정의할 수 없습니다. 각 필드 유형에 대해 하나의typeSet정의만 구성할 수 있습니다.예시 들어 동일한
typeSet정의에서number유형에 대해 여러 구성을 정의할 수 없습니다.multi분석기 사용하여 동적 매핑을 구성할 수 있습니다.
Atlas UI Visual Editor에서는 typeSet 를 구성할 수 없습니다. 대신 Atlas UI JSON Editor 를 사용하세요.
사용자 지정 typeSet 구성을 사용하는 방법을 보여주는 인덱스 예시는 동적 매핑 예시.를 참조하세요.
정적 매핑
정적 매핑을 사용하여 동적으로 인덱싱하지 않으려는 필드에 대한 인덱스 옵션을 구성하거나 인덱스 의 다른 필드와 독립적으로 단일 필드 구성합니다. 정적 매핑을 사용하는 경우 MongoDB 검색 인덱스는 mappings.fields에 지정한 필드만 인덱싱합니다. 정적 매핑을 사용하여 필드가 인덱스에 포함되지 않도록 제외할 수도 있습니다.
정적 매핑을 사용하여 일부 필드에 대해서만 인덱스 옵션을 구성하려면 mappings.dynamic 를 false 로 설정하고 인덱스 할 각 필드에 대해 필드 이름, 데이터 유형 및 기타 구성 옵션을 지정합니다. 필드는 어떤 순서로든 지정할 수 있습니다.
mappings.dynamic 필드를 생략하는 경우 기본값인 false로 설정됩니다.
1 { 2 "mappings": { 3 "dynamic": true|false, 4 "fields": { 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
중첩된 필드 에 대한 인덱스 정의하려면 해당 중첩 필드 의 각 상위 필드 에 대한 매핑을 정의해야 합니다. 점 표기법 사용하여 중첩된 필드를 정적으로 인덱스 할 수 없습니다. 예제는 아래의 예제 또는 결합된 매핑 예제 를 참조하세요.
정적 매핑을 사용하여 필드를 여러 유형으로 인덱스 할 수 있습니다. 필드 여러 유형으로 인덱스 하려면 필드 정의 배열 에서 필드 의 유형을 정의합니다. 정적 매핑을 사용하여 모든 필드 지원되는 유형으로 인덱스 할 수 있습니다. 자세히 학습 MongoDB 검색 필드 유형을 참조하세요.
다음 예에서는 필드를 여러 유형으로 인덱싱하기 위한 필드 정의를 보여줍니다.
1 { 2 "mappings": { 3 "dynamic": true|false | { 4 "typeSet": "<type-set-name>" 5 }, 6 "fields": { 7 "<field-name>": [ 8 { 9 "type": "<field-type>", 10 ... 11 }, 12 { 13 "type": "<field-type>", 14 ... 15 }, 16 ... 17 ], 18 ... 19 } 20 }. 21 "typeSets": [ 22 { 23 "name": "<typeset-name>", 24 "types": [ 25 { 26 "type": "<field-type>" 27 }, 28 ... 29 ] 30 }, 31 ... 32 ] 33 }
정적 매핑을 보여주는 다른 인덱스 예시는 정적 매핑 예시.를 참조하세요.
MongoDB 검색 필드 유형
MongoDB Search는 다음 BSON 데이터 유형:을 지원하지 않습니다.
Decimal128
범위가 있는 자바스크립트 코드
최대 키
Min key
정규 표현식
타임스탬프
MongoDB Search는 문자열 유형의 필드를 mongot에 자동으로 저장합니다. 인덱스 정의에서 MongoDB Search 인덱스에 저장된 소스 필드 정의 옵션을 사용하여 지원되는 모든 데이터 유형의 필드를 MongoDB Search에 저장 수 있습니다. mongot 및 MongoDB Search 노드 아키텍처에 대해 자세히 학습하려면 MongoDB Search 배포 옵션을 참조하세요.
다음 표에는 BSON 데이터 유형을 인덱스 데 사용할 수 있는 지원되는 BSON데이터 유형과 MongoDB Search 필드 유형이 열거되어 있습니다. 이 표에는 필드 값을 쿼리하는 데 사용할 수 있는 연산자 및 컬렉터 도 나열되어 있습니다.
BSON 유형 | MongoDB 검색 필드 유형 | 연산자와 콜렉터 |
|---|---|---|
배열의 데이터 유형을 지원하는 연산자입니다. | ||
부울 | ||
날짜 | ||
날짜 | ||
Double | ||
Double | ||
Double | ||
32비트 정수 | ||
32비트 정수 | ||
64비트 정수 | ||
64비트 정수 | ||
Null | N/A | |
객체 | 객체 의 필드 유형을 지원 연산자입니다. | |
객체 | EmbeddedDocument(객체 배열용) | |
ObjectId | ||
문자열 | ||
문자열 | ||
문자열 | ||
문자열 | ||
벡터 |
이러한 연산자는 문자열 배열 지원 하지 않습니다.
MongoDB Search는 정적 및 동적으로 인덱싱된 MongoDB 모두에 대해 null 값을 자동으로 인덱싱하기 때문에 null 값을 인덱싱 위한 필드 유형을 포함하지 않습니다.
더 이상 사용되지 않습니다. 더 이상 사용되지 않는 패싯 필드 유형과 업데이트된 해당 필드 유형에 대해 자세히 학습 보려면 패싯의 필드 유형 비교를 참조하세요.
double 또는 int 값의 배열입니다.
참고
옵션을 사용하여 지원되는 모든 데이터 유형의 필드를MongoDB Search에 저장 수 있습니다.storedSource
예시
다음 예제에서는 sample_mflix.movies 컬렉션 사용하여 동적 및 정적 매핑을 사용하여 인덱스 할 필드를 구성하는 방법을 보여 줍니다. 샘플 데이터를 로드하면 컬렉션 에 이러한 인덱스를 만들 수 있습니다. MongoDB 검색 인덱스를 만드는 방법을 학습하려면 MongoDB Search 빠른 시작을 참조하세요.
동적 매핑 예시
다음 인덱스 정의 예시는 동적 매핑을 보여줍니다.
이 인덱스 정의에서는 dynamic 부울 플래그를 true 로 설정하다 컬렉션 에서 동적으로 인덱싱할 수 있는 모든 필드를 자동으로 인덱스 .
{ mappings: { "dynamic": true } }
다음 인덱스 정의는 지정된 필드 유형에 대한 동적 매핑을 구성합니다. 다음을 인덱싱합니다.
컬렉션 의 모든 숫자 값은
number필드 유형으로 해당 유형에 대한 기본값 설정을 사용합니다.컬렉션의 모든 string 값은
edgeGram토큰화 전략을 사용하는autocomplete유형이며 토큰당 최소 4자에서 최대 10자입니다.
{ "mappings": { "dynamic": { "typeSet": "movieFieldTypes" } }, "typeSets": [ { "name": "movieFieldTypes", "types": [ { "type": "number" }, { "type": "autocomplete", "analyzer": "lucene.standard", "tokenization": "edgeGram", "minGrams": 4, "maxGrams": 10 } ] } ] }
이 인덱스 정의는 다음과 같습니다.
기본값 인덱스 분석기 lucene.standard로 지정합니다.
기본값 검색 분석기 lucene.standard로 지정합니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
first라는typeSet를 사용하여 다음 필드 유형으로 루트 수준에서 모든string필드의 자동 인덱싱 구성합니다.token유형에 대한 기본값 설정을 사용하여 입력합니다.autocomplete유형에 대한 기본값 설정을 사용하여 입력합니다.
숫자 및 텍스트 값이 있는 필드가 포함된
awards문서 에 대한 정적 매핑을 지정합니다. 그러나 인덱스 정의는second이라는typeSet를 사용하는 문서 에서number유형의 필드에 대해서만 자동 인덱싱 구성합니다.
{ "mappings": { "dynamic": { "typeSet": "first" }, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "second" } } } }, "typeSets": [ { "name": "first", "types": [ { "type": "token" }, { "type": "autocomplete" } ] }, { "name": "second", "types": [ { "type": "number" } ] } ] }
이 인덱스 정의는 다음과 같습니다.
기본값 인덱스 분석기 lucene.standard로 지정합니다.
기본값 검색 분석기 lucene.standard로 지정합니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
루트 수준에서 동적으로 인덱싱할 수 있는 모든 필드의 자동 인덱싱 활성화합니다.
tomatoes문서 내에서 동적으로 인덱싱할 수 있는 모든 필드의 자동 인덱싱 활성화하지만tomatoes.viewer문서 에서는number유형에 대해서만 자동 인덱싱 구성합니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": true, "fields": { "tomatoes": { "type": "document", "dynamic": true, "fields": { "viewer": { "type": "document", "dynamic": { "typeSet": "numericOnly" } } } } } }, "typeSets": [ { "name": "numericOnly", "types": [ { "type": "number" } ] } ] }
동적 매핑 예시
다음 인덱스 정의 예시 정적 매핑을 보여줍니다.
기본값 인덱스 분석기 lucene.standard로 지정합니다.
기본값 검색 분석기 lucene.standard로 지정합니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
정적 필드 매핑(
dynamic:false)을 지정하며, 명시적으로 언급되지 않은 필드는 인덱스되지 않습니다. 따라서 인덱스 정의에는 다음이 포함됩니다.document유형의awards필드 입니다. 여기에는 세 개의 하위 필드wins,nominations및text가 포함되어 있습니다.wins및nominations하위 필드는 쿼리에 기본값으로 lucene.standard 분석기 사용합니다. MongoDB Search는nominations필드 의int64값을 인덱싱합니다.text하위 필드는 쿼리에 기본값으로 lucene.english 분석기 사용합니다.ignoreAbove옵션을 사용하여 길이가 255 바이트를 초과하는 string을 무시합니다.title필드는string유형입니다. 쿼리에 기본적으로 lucene.whitespace 분석기를 사용합니다. 여기에는mySecondaryAnalyzer라는 이름의multi분석기가 있으며, 쿼리에 대해 기본적으로 lucene.french 분석기를 사용합니다.문자열 배열 인
genres필드 입니다. 쿼리에 기본값 으로 lucene.standard 분석기 사용합니다. 인덱싱 배열의 경우 MongoDB Search에는 배열 요소의 데이터 유형 만 필요합니다. 인덱스 정의에서 데이터가 배열 에 포함되도록 지정할 필요는 없습니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "awards": { "type": "document", "fields": { "wins": { "type": "number" }, "nominations": { "type": "number", "representation": "int64" }, "text": { "type": "string", "analyzer": "lucene.english", "ignoreAbove": 255 } } }, "title": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "genres": { "type": "string", "analyzer": "lucene.standard" } } } }
이 인덱스 정의는 다음과 같습니다.
기본값 인덱스 분석기 lucene.standard로 지정합니다.
기본값 검색 분석기 lucene.standard로 지정합니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
다음을 지정하는
indexedTypes이라는typeSet를 사용하여 특정 필드 유형에 대한 동적 매핑을 구성합니다.string유형의 필드는token유형에 대한 기본값 설정을 사용하여token유형으로 자동으로 인덱스되어야 합니다.number유형의 필드는number유형에 대한 기본값 설정을 사용하여number유형으로 자동으로 인덱스되어야 합니다.
plot필드 인덱싱에서 제외합니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": { "typeSet": "indexedTypes" }, "fields": { "plot": [] } }, "typeSets": [ { "name": "indexedTypes", "types": [ { "type": "token" }, { "type": "number" } ] } ] }
결합된 매핑 예시
다음 인덱스 정의 예시에서는 동적 매핑과 정적 매핑을 결합합니다.
이 인덱스 정의는 다음과 같습니다.
기본값 인덱스 분석기 lucene.standard로 지정합니다.
기본값 검색 분석기 lucene.standard로 지정합니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
정적 필드 매핑(
dynamic:false)을 지정하며, 명시적으로 언급되지 않은 필드 및 필드 유형은 인덱스되지 않습니다. 따라서 인덱스 정의에는 다음이 포함됩니다.title필드는string유형입니다. 쿼리에 기본적으로 lucene.whitespace 분석기를 사용합니다. 여기에는mySecondaryAnalyzer라는 이름의multi분석기가 있으며, 쿼리에 대해 기본적으로 lucene.french 분석기를 사용합니다.genres필드는 문자열 배열로 이루어집니다. 쿼리에 기본적으로 lucene.standard 분석기를 사용합니다.document유형의awards필드 입니다. 여기에는 세 개의 하위 필드wins,nominations및text가 포함되어 있습니다. 문서 에 중첩된 각 필드 명시적으로 언급하는 대신 인덱스 정의를 사용하면 문서 의 모든 하위 필드에 대한 동적 매핑을 사용할 수 있습니다. 쿼리에 기본값으로 lucene.standard 분석기를 사용합니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "title": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "genres": { "type": "string", "analyzer": "lucene.standard" }, "awards": { "type": "document", "dynamic": true } } } }
이 인덱스 정의는 다음과 같습니다.
기본값 인덱스 분석기 lucene.standard로 지정합니다.
기본값 검색 분석기 lucene.standard로 지정합니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
정적 필드 매핑(
dynamic:false)을 지정하며, 명시적으로 언급되지 않은 필드 및 필드 유형은 인덱스되지 않습니다. 따라서 인덱스 정의에는document유형의awards필드 만 포함됩니다.awards필드wins,nominations및text의 세 가지 하위 필드가 포함되어 있습니다.dynamic를true로 명시적으로 설정하거나 정적 매핑을 사용하여 문서 의 각 중첩 필드 를 명시적으로 인덱싱 문서 의 모든 필드를 자동으로 인덱싱 대신 인덱스 정의는 필드 사용하여document필드 유형에 대한 동적 매핑을 구성합니다.movieAwards이라는 유형 정의:lucene.english및lucene.french분석기를 모두 사용하는string유형의 인덱스 필드입니다.number유형에 대한 기본값 설정을 사용하는number유형의 필드를 인덱스합니다.string유형의 필드를edgeGram토큰화 전략을 사용하여 3~5자 길이의 토큰을 생성하는autocomplete유형으로 인덱스합니다.{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "movieAwards" } } } }, "typeSets": [ { "name": "movieAwards", "types": [ { "type": "string", "multi": { "english": { "type": "string", "analyzer": "lucene.english" }, "french": { "type": "string", "analyzer": "lucene.french" } } }, { "type": "number" }, { "type": "autocomplete", "analyzer": "lucene.standard", "tokenization": "edgeGram", "minGrams": 3, "maxGrams": 5, "foldDiacritics": false } ] } ] }
이 인덱스 정의에서:
기본 인덱스 분석기는 lucene.standard입니다.
기본값 검색 분석기 lucene.standard입니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
인덱스
first이라는typeSet정의에 정의된 필드 유형에 대한 동적 매핑을 지정합니다.firsttypeSet정의는 필드 유형에 대한 기본값 설정을 사용하여string유형의 모든 필드를token유형으로,number유형의 모든 필드를number유형으로 인덱싱합니다.인덱스 정의는
awards필드 에 대한 정적 매핑을 지정하지만second이라는typeSet를 사용하여awards문서 의 필드에 대한 동적 매핑을 구성합니다.second필드 유형 정의는 해당 유형에 대한 기본값 설정을 사용하여awards문서 에서string유형의 모든 필드를autocomplete유형으로 인덱싱합니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": { "typeSet": "first" }, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "second" } } } }, "typeSets": [ { "name": "first", "types": [ { "type": "token" }, { "type": "number" } ] }, { "name": "second", "types": [ { "type": "autocomplete" } ] } ] }