MongoDB Search 인덱스 생성할 때 다음 메서드를 사용하여 인덱스 할 필드를 지정할 수 있습니다.
동적 매핑: MongoDB Search가 지원 유형의 모든 필드를 자동으로 인덱스 할 수 있도록 합니다.
정적 매핑: 사용자가 인덱싱할 필드를 지정할 수 있습니다.
데이터 유형 제한
2.1 0억 개 이상의 인덱스 객체를 보유하고 있거나 보유할 예정인 MongoDB Search 인덱스 생성하는 경우,
numPartitions
또는클러스터에 샤드 사용해야 합니다. 이 제한의 경우 각 최상위 문서 또는 인덱싱된 컬렉션 필드의 중첩된embeddedDocument
는 하나 객체 로 계산됩니다.기본값 으로 MongoDB Search는 지정된 복제본 세트 멤버 또는 샤드 에서 인덱스 객체가 2.1 0억 개 이상 증가하는 단일 인덱스 에 대한 변경 사항 복제를 중지합니다. 즉, 인덱스 계속 쿼리할 수 있지만 오래된 결과가 나타날 수 있습니다.
인덱스 객체 최상위 문서 또는 내장된 문서 인 2.1 억을 초과할 수 있는 필드를 인덱스 하려는 경우, numPartitions 인덱스 옵션을 사용하여 인덱스를 분할하거나(검색 노드 배포에서만 지원됨) 클러스터를 샤드.
필드 이름 시작 부분에 달러(
$
) 기호가 포함된 필드는 인덱싱할 수 없습니다.
구문
동적 매핑을 사용하려면 인덱스 정의에서 mappings.dynamic
을 true
로 설정합니다. mappings.fields
에서 구성하려는 각 필드에 대해 필드 이름, 데이터 유형 및 기타 구성 옵션을 지정하여 개별 필드를 구성할 수도 있습니다. 필드는 원하는 순서대로 지정할 수 있습니다.
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { // Optional, use this to configure individual fields 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
정적 매핑을 사용하려면 mappings.dynamic
을 false
로 설정하고 mappings.fields
에서 인덱싱할 각 필드에 대해 필드 이름, 데이터 유형 및 기타 구성 옵션을 지정합니다. 필드는 원하는 순서대로 지정할 수 있습니다.
mappings.dynamic
필드를 생략하는 경우 기본값인 false
로 설정됩니다.
1 { 2 "mappings": { 3 "dynamic": false, // Optional, if omitted defaults to "false" 4 "fields": { 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
여러 유형으로 다형성 데이터를 포함하는 필드를 인덱싱하려면 각 데이터 유형에 대해 하나씩, 해당 필드에 대한 필드 정의 배열을 지정하면 됩니다.
1 { 2 "mappings": { 3 "dynamic": <boolean>, 4 "fields": { 5 "<field-name>": [ 6 { 7 "type": "<field-type>", 8 ... 9 }, 10 { 11 "type": "<field-type>", 12 ... 13 }, 14 ... 15 ], 16 ... 17 }, 18 ... 19 } 20 }
정적 및 동적 매핑
정적 및 동적 매핑을 사용하여 MongoDB Search가 컬렉션 의 모든 동적으로 인덱싱 가능한 필드를 자동으로 인덱스 해야 하는지 여부를 지정할 수 있습니다.
동적 매핑
동적 매핑을 사용하여 컬렉션에서 지원되는 유형 의 모든 필드를 자동으로 인덱스. 스키마 정기적으로 변경되거나 알 수 없는 경우 또는 MongoDB Search를 실험하는 경우에만 동적 매핑을 사용하는 것이 좋습니다. 동적으로 매핑된 인덱스는 정적으로 매핑된 인덱스보다 더 많은 디스크 공간을 차지하며 성능이 떨어질 수 있습니다.
다형성 데이터가 포함된 필드 동적으로 인덱스 하면 MongoDB Search는 해당 데이터에 해당하는 동적으로 인덱싱 가능한 모든 필드 유형으로 해당 필드 자동으로 인덱싱합니다. 필드 MongoDB Search가 자동으로 인덱스 하지 않는 유형의 데이터가 포함되어 있는 경우, MongoDB Search는 해당 데이터를 인덱스 하지 않습니다.
MongoDB Search는 감지된 데이터 유형 에 대한 기본값 설정을 사용하여 문서 의 모든 필드를 동적으로 인덱싱합니다. 또한 dynamic
을(를) false
(으)로 설정하여 명시적으로 재정의하지 않는 한, MongoDB Search는 문서 아래에 있는 모든 중첩된 문서를 동적으로 인덱싱합니다.
어떤 데이터 유형이 동적 인덱싱을 지원하는지 확인하려면 아래 데이터 유형 섹션을 참조하세요.
정적 매핑
정적 매핑을 사용하여 동적으로 인덱싱하지 않으려는 필드에 대한 인덱스 옵션을 구성하거나 인덱스 의 다른 필드와 독립적으로 단일 필드 구성합니다. 정적 매핑을 사용하는 경우 MongoDB Search는 mappings.fields
에 지정한 필드만 인덱싱합니다.
다형성 데이터가 포함된 필드 정적으로 인덱스 경우 MongoDB Search는 해당 필드 의 인덱스 정의에 지정된 매핑에 해당하는 문서만 인덱싱합니다. MongoDB Search는 해당 필드 의 인덱스 정의에 지정된 데이터 유형 과 일치하지 않는 문서를 인덱스 하지 않습니다.
중첩 필드에 대한 인덱스를 정의하려면 해당 중첩 필드의 각 상위 필드에 대한 매핑을 정의해야 합니다. 점 표기법을 사용하여 중첩된 필드를 정적으로 인덱스할 수 없습니다. 예시는 아래의 예시 또는 결합된 매핑 예시를 참조하세요.
데이터 유형
MongoDB Search는 다음 BSON 데이터 유형:을 지원하지 않습니다.
Decimal128
범위가 있는 자바스크립트 코드
최대 키
Min key
정규 표현식
타임스탬프
MongoDB Search는 문자열 유형의 필드를 mongot
에 자동으로 저장합니다. 인덱스 정의에서 MongoDB Search 인덱스에 저장된 소스 필드 정의 옵션을 사용하여 지원되는 모든 데이터 유형의 필드를 MongoDB Search에 저장 수 있습니다. mongot
및 MongoDB Search 노드 아키텍처에 대해 자세히 학습하려면 MongoDB Search 배포 옵션을 참조하세요.
다음 표에는 BSON 데이터 유형을 인덱스 데 사용할 수 있는 지원되는 BSON 데이터 유형과 MongoDBSearch 필드 유형이 열거되어 있습니다. 이 표는 또한 동적 매핑을 활성화 때 MongoDB Search 필드 유형이 MongoDB Search 인덱스 에 자동으로 포함되는지 여부와 필드 값을 쿼리 데 사용할 수 있는 연산자 및 컬렉터를 나열합니다.
BSON 유형 | MongoDB 검색 필드 유형 | 동적 인덱싱 | 연산자와 콜렉터 |
---|---|---|---|
✓ | 배열의 데이터 유형을 지원하는 연산자입니다. | ||
부울 | ✓ | ||
날짜 | ✓ | ||
날짜 | |||
Double | ✓ | ||
Double | |||
Double | |||
32비트 정수 | ✓ | ||
32비트 정수 | |||
64비트 정수 | ✓ | ||
64비트 정수 | |||
Null | N/A | ✓ | |
객체 | ✓ | 모든 연산자 | |
객체 | EmbeddedDocument(객체 배열용) | ||
ObjectId | ✓ | ||
문자열 | ✓ | ||
문자열 | |||
문자열 | |||
문자열 | |||
✓ |
일부 제한 사항이 적용됩니다. 자세히 알아보려면 배열의 요소를 인덱스하는 방법을 참조하세요.
string
유형의 경우 moreLikeThis 및 queryString 연산자는 문자열 배열을 지원하지 않습니다.
MongoDB Search는 정적 및 동적으로 인덱싱된 MongoDB 모두에 대해 null 값을 자동으로 인덱싱하기 때문에 null 값을 인덱싱 위한 필드 유형을 포함하지 않습니다.
더 이상 사용되지 않습니다.
참고
옵션을 사용하여 지원되는 모든 데이터 유형의 필드를MongoDB Search에 저장 수 있습니다.storedSource
여러 데이터 유형을 가진 인덱스 필드 설정하기
필드를 여러 유형으로 인덱싱하려면, 필드 정의 배열에서 해당 필드의 유형들을 정의하세요.
예시
다음 예에서는 필드를 여러 유형으로 인덱싱하기 위한 필드 정의를 보여줍니다.
1 { 2 ... 3 "mappings": { 4 "dynamic": <boolean>, 5 "fields": { 6 "<field-name>": [ 7 { 8 "type": "<field-type>", 9 ... 10 }, 11 { 12 "type": "<field-type>", 13 ... 14 }, 15 ... 16 ], 17 ... 18 }, 19 ... 20 } 21 }
예시
동적 매핑 예시
다음 인덱스 정의 예시에서는 정적 매핑을 사용합니다.
기본 인덱스 분석기는 lucene.standard입니다.
기본값 검색 분석기 lucene.standard입니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
인덱스는 정적 필드 매핑(
dynamic
:false
)을 지정합니다. 즉, 명시적으로 언급되지 않은 필드는 인덱싱되지 않습니다. 따라서 인덱스 정의에는 다음이 포함됩니다:address
필드는document
유형입니다. 여기에는 두 개의 하위 필드city
및state
가 포함되어 있습니다.city
하위 필드는 쿼리에 기본적으로 lucene.simple 분석기를 사용합니다.ignoreAbove
옵션을 사용하여 길이가 255바이트를 초과하는 문자열을 무시합니다.state
하위 필드는 쿼리에 기본적으로 lucene.english 분석기를 사용합니다.company
필드는string
유형입니다. 쿼리에 기본적으로 lucene.whitespace 분석기를 사용합니다. 여기에는mySecondaryAnalyzer
라는 이름의multi
분석기가 있으며, 쿼리에 대해 기본적으로 lucene.french 분석기를 사용합니다.문자열 배열 인
employees
필드 입니다. 쿼리에 기본값 으로 lucene.standard 분석기 사용합니다. 인덱싱 배열의 경우 MongoDB Search에는 배열 요소의 데이터 유형 만 필요합니다. 인덱스 정의에서 데이터가 배열 에 포함되도록 지정할 필요는 없습니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "address": { "type": "document", "fields": { "city": { "type": "string", "analyzer": "lucene.simple", "ignoreAbove": 255 }, "state": { "type": "string", "analyzer": "lucene.english" } } }, "company": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "employees": { "type": "string", "analyzer": "lucene.standard" } } } }
결합된 매핑 예시
다음 인덱스 정의 예시에서는 정적 매핑과 동적 매핑을 모두 사용합니다.
기본 인덱스 분석기는 lucene.standard입니다.
기본값 검색 분석기 lucene.standard입니다. 쿼리 텀 MongoDB Search 인덱스 에 저장되는 방식과 다르게 쿼리 분석되도록 하려면 검색 분석기 변경할 수 있습니다.
인덱스는 정적 필드 매핑(
dynamic
:false
)을 지정합니다. 즉, 명시적으로 언급되지 않은 필드는 인덱싱되지 않습니다. 따라서 인덱스 정의에는 다음이 포함됩니다.company
필드는string
유형입니다. 쿼리에 기본적으로 lucene.whitespace 분석기를 사용합니다. 여기에는mySecondaryAnalyzer
라는 이름의multi
분석기가 있으며, 쿼리에 대해 기본적으로 lucene.french 분석기를 사용합니다.employees
필드는 문자열 배열로 이루어집니다. 쿼리에 기본적으로 lucene.standard 분석기를 사용합니다.address
필드는document
유형입니다. 여기에는 두 개의 하위 필드city
및state
가 포함되어 있습니다. 문서에 중첩된 각 필드를 명시적으로 언급하는 대신 인덱스 정의를 통해 문서의 모든 하위 필드에 대한 동적 매핑을 사용할 수 있습니다. 쿼리에는 기본적으로 lucene.standard 분석기를 사용합니다.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "company": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "employees": { "type": "string", "analyzer": "lucene.standard" }, "address": { "type": "document", "dynamic": true } } } }