AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

필드 매핑 정의

MongoDB 검색 인덱스 생성할 때 다음 메서드를 사용하여 인덱스 할 필드를 지정할 수 있습니다.

  • 동적 매핑: MongoDB 검색을 활성화하여 기본값 또는 구성된 필드 유형 세트(typeSet)에 따라 모든 필드를 자동으로 인덱싱합니다.

  • 정적 매핑: 인덱스 할 필드를 지정할 수 있습니다.

  • 기본값 으로 MongoDB Search는 복제본 세트 또는 단일 샤드 에서 인덱스 객체가 2.1 개보다 큰 인덱스에 대한 변경 사항 복제를 중지하며, 여기서 각 인덱스된 문서 또는 중첩된 embeddedDocument 는 단일 객체 로 계산됩니다. 즉, 인덱스 를 계속 쿼리할 수 있지만 오래된 결과가 나올 수 있습니다.

    인덱스 객체가 최상위 문서 또는 내장된 문서인 2.1 억 개를 초과할 수 있는 필드를 인덱스하려는 경우, numPartitions 인덱스 옵션을 사용하여 인덱스를 분할하거나(검색 노드 배포서버에서만 지원됨) 클러스터를 샤드합니다.

  • 필드 이름 시작 부분에 달러($) 기호가 포함된 필드는 인덱싱할 수 없습니다.

  • 자동 완성 필드 유형은 큰 인덱스를 생성할 수 있으며 다른 필드 유형보다 빌드 시간이 오래 걸릴 수 있습니다. 동적 매핑에서 autocomplete 유형을 사용자 지정 typeSet 정의에 포함하여 사용할 수 있지만, 의도하지 않은 성능, 저장 및 점수에 미치는 영향을 방지하려면 정적 매핑에서만 autocomplete 유형을 사용하는 것이 좋습니다. 자세한 학습 은 자동 완성을 위한 필드 인덱싱 방법MongoDB Search 인덱스 성능을 참조하세요.

The following syntax demonstrates how to enable MongoDB Search to index fields using dynamic and static mappings. To learn more about dynamic and static mappings, see Dynamic and Static Mappings.

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)을 기반으로 필드를 자동으로 인덱스 하는 동적 매핑

  • 지정된 필드만 인덱스 하는 정적 매핑

You can also use dynamic mappings with static mappings. Static mappings override the dynamic mappings configuration.

MongoDB Search 동적 매핑을 사용하면 데이터의 필드를 자동으로 재귀적으로 인덱스 하도록 MongoDB Search를 구성할 수 있습니다. 필드는 기본값 유형을 설정하여 기반으로 하거나 typeSet를 구성하여 인덱싱할 수 있습니다.

동적 매핑을 활성화 하거나 구성할 수 있습니다.

  • 루트 mappings 수준에서 전체 문서 에 적용 .

  • [권장] document 내에서 지정된 객체 에 적용 필드 유형입니다.

  • [권장] embeddedDocuments 필드 내에서 요소별 쿼리 비교가 필요한 지정된 객체 배열에 적용 필드 유형($elemMatch과 유사)입니다.

참고

모범 사례

동적 매핑으로 인해 많은 수의 고유 필드가 인덱싱 될 수 있으며, 이로 인해 디스크 공간을 더 많이 차지하고 성능이 저하될 수 있습니다. 정기적으로 변경되거나 알 수 없는 필드를 인덱스 해야 하는 경우에만 동적 매핑을 사용합니다. 상위 문서 수준이 아닌 문서 내에서 항상 동적 매핑을 사용합니다.

동적 매핑을 사용하여 데이터를 인덱스 하는 경우:

  • 또한 MongoDB Search는 데이터의 document 객체 에서 typeSet 가 지원하는 모든 중첩 필드를 동적으로 인덱싱합니다.

  • 필드 에 다형성 데이터가 포함된 경우, MongoDB 검색은 인덱스 에 사용된 typeSet 에서 지원하는 모든 유형으로 필드 를 자동으로 인덱싱합니다. 필드 typeSet에서 지원하지 않는 유형의 데이터가 포함되어 있는 경우, MongoDB Search는 해당 데이터를 인덱스 하지 않습니다.

MongoDB Search는 dynamictrue로 설정되면 기본값 typeSet 을 사용합니다. 기본값 typeSet에서 MongoDB Search는 BSON 유형을 MongoDB Search 필드 유형으로 인덱싱합니다. 다음 표에는 기본값 typeSet을 사용할 때 MongoDB Search가 MongoDB Search 필드 유형으로 자동으로 인덱싱하는 BSON 유형이 표시되어 있습니다. MongoDB Search는 배열 및 객체 내에 포함되어 있는 다음 BSON 유형도 자동으로 인덱싱합니다.

BSON 유형
MongoDB 검색 필드 유형

부울

날짜

Double, 32-비트 정수, 64-비트 정수

ObjectId

문자열

UUID

Null

다음은 동적 매핑에 대한 기본값 유형 집합을 활성화하는 구문입니다.

1{
2 "mappings": {
3 "dynamic": true
4 }
5}

For index examples that demonstrate indexing all fields using the default typeSet, see Dynamic Mapping Examples.

typeSet을 구성하여 동적으로 인덱싱할 MongoDB Search 필드 유형을 지정합니다. 모든 BSON 유형을 document, embeddedDocuments, vector 또는 더 이상 사용되지 않는 필드 유형을 제외한 모든 MongoDB Search 필드 유형으로 자동으로 인덱싱되도록 구성할 수 있습니다.

typeSet 의 구문은 다음과 같습니다.

참고

Atlas UI Visual Editor에서는 typeSet을(를) 구성할 수 없습니다. Atlas UI JSON Editor를 대신 사용하세요.

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 분석기 사용하여 동적 매핑을 구성할 수 있습니다.

For index examples that demonstrate using custom typeSet configuration, see Dynamic Mapping Examples.

정적 매핑을 사용하여 동적으로 인덱싱하지 않으려는 필드에 대한 인덱스 옵션을 구성하거나 인덱스 의 다른 필드와 독립적으로 단일 필드 구성합니다. 정적 매핑을 사용하는 경우 MongoDB 검색 인덱스는 mappings.fields에 지정한 필드만 인덱싱합니다. 정적 매핑을 사용하여 필드가 인덱스에 포함되지 않도록 제외할 수도 있습니다.

To use static mappings to configure index options for only some fields, set mappings.dynamic to false and specify the field name, data type, and other configuration options for each field that you want to index. You can specify the fields in any order.

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}

To define the index for a nested field, you must define the mappings for each parent field of that nested field. You can't use dot notation to statically index nested fields. For examples, see the Examples or Combined Mapping Example below.

You can use static mappings to index fields as multiple types. To index a field as multiple types, define the types in the field definition array for the field. You can index any field as any supported types using static mappings. To learn more, see MongoDB Search Field Types.

다음 예에서는 필드를 여러 유형으로 인덱싱하기 위한 필드 정의를 보여줍니다.

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}

For other index examples that demonstrate static mappings, see Static Mapping Example.

MongoDB Search는 다음 BSON 데이터 유형:을 지원하지 않습니다.

  • Decimal128

  • 범위가 있는 자바스크립트 코드

  • 최대 키

  • Min key

  • 정규 표현식

  • 타임스탬프

MongoDB Search automatically stores fields of type string on mongot. You can store fields of all supported data types on MongoDB Search using the Define Stored Source Fields in Your MongoDB Search Index option in your index definition. To learn more about mongot and MongoDB Search node architecture, see MongoDB Search Deployment Options.

다음 표에는 지원되는 BSON 데이터 유형BSON 데이터 유형을 인덱싱하는 데 사용할 수 있는 MongoDB Search 필드 유형 이 열거되어 있습니다. 이 표에는 필드 값을 쿼리하는 데 사용할 수 있는 연산자 및 수집기 도 나열되어 있습니다.

이러한 연산자는 문자열 배열 지원 하지 않습니다.

MongoDB Search는 정적 및 동적으로 인덱싱된 MongoDB 모두에 대해 null 값을 자동으로 인덱싱하기 때문에 null 값을 인덱싱 위한 필드 유형을 포함하지 않습니다.

더 이상 사용되지 않습니다. 더 이상 사용되지 않는 패싯 필드 유형과 업데이트된 해당 필드 유형에 대해 자세히 학습 보려면 패싯의 필드 유형 비교를 참조하세요.

double 또는 int 값의 배열입니다.

참고

You can store fields of all supported data types on MongoDB Search using the storedSource option.

sample_mflix.movies 컬렉션에 대한 다음 샘플 인덱스 정의는 동적 및 정적 매핑을 사용하여 필드에 인덱스를 사용하는 방법을 보여줍니다. 클러스터에 샘플 데이터를 로드 하여 예시를 시도해 볼 수 있습니다. MongoDB Search 인덱스 생성 방법에 대한 자세한 내용은 MongoDB Search 빠른 시작을 참조하세요.

다음 샘플 인덱스 정의는 동적 매핑을 사용하는 방법을 보여줍니다.

동적 매핑을 활성화하여 string 필드 유형을 자동으로 인덱스.

인덱스 정의는 다음과 같습니다.

  • 루트 수준에서 동적 매핑을 활성화하여 only_strings이라는 이름의 typeSet 정의를 기반으로 컬렉션 의 필드를 자동으로 인덱스 합니다. 이 정의는 positions 인덱스 옵션이 있고 storefalse로 설정하다 컬렉션 의 string 필드를 인덱싱합니다. . 이러한 구성 옵션은 쿼리 강조 표시를 위해 필드 값이나 텀 오프셋을 저장하지 않으므로 디스크 공간을 절약합니다.
{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
}
},
"typeSets": [
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

문서 유형 필드 내에서 동적 매핑을 활성화하여 중첩된 필드를 자동으로 인덱스 .

인덱스 정의는 다음과 같습니다.

  • 루트 수준에서 동적 매핑을 활성화하여 only_strings이라는 이름의 typeSet 를 기반으로 컬렉션 의 필드를 동적으로 인덱스 합니다. 이 컬렉션은 positions 인덱스 옵션과 storefalse로 설정하다 컬렉션 의 string 필드를 인덱싱합니다. 쿼리 강조 표시를 위해 필드 값이나 텀 오프셋을 저장하지 않으므로 디스크 공간을 절약할 수 있습니다.

  • awards 필드 document 유형으로 인덱싱하고 only_numbers typeSet 와 함께 dynamic 옵션을 사용하여 awards 문서 에서 숫자 하위 필드만 동적으로 인덱스 . 즉, 숫자 하위 필드 winsnominations 는 인덱싱되지만 string 하위 필드 text 는 인덱싱되지 않습니다.

{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "only_numbers"
}
}
}
},
"typeSets": [
{
"name": "only_numbers",
"types": [
{
"type": "number"
}
]
},
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

지정된 필드를 제외한 특정 필드 유형을 동적으로 매핑합니다.

인덱스 정의는 다음과 같습니다.

  • 다음 동작을 지정하는 typeSet indexedTypes 이름을 사용하여 특정 필드 유형에 대한 동적 매핑을 구성합니다.

    • string 필드를 token 유형으로 자동 인덱스 .

    • 숫자 필드를 number 유형으로 자동 인덱스 .

  • plot 필드 인덱싱에서 제외합니다.

{
"mappings": {
"dynamic": {
"typeSet": "indexedTypes"
},
"fields": {
"plot": []
}
},
"typeSets": [
{
"name": "indexedTypes",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
}
]
}

다음 샘플 인덱스 정의는 정적 매핑을 사용하는 방법을 보여줍니다.

동적 매핑을 비활성화하고 인덱싱 위한 개별 필드를 정의합니다.

인덱스 정의는 다음과 같습니다.

  • 루트 수준(dynamic: false)에서 정적 필드 매핑을 지정하며, 이는 mappings.fields 에 지정되지 않은 필드는 인덱싱되지 않음을 의미합니다. 인덱스 정의에는 다음과 같은 인덱싱 필드가 명시적으로 포함되어 있습니다.

    • document 유형의 awards 필드 입니다. 여기에는 세 개의 하위 필드 wins, nominationstext가 포함되어 있습니다.

      winsnominations 하위 필드는 숫자 데이터를 포함하며 number 유형으로 인덱싱됩니다. nominationsint64 표현으로 인덱싱되어 기본값 number 유형보다 큰 정수 값을 지원 수 있습니다.

      The text sub-필드에는 string 데이터가 포함되며, 영어 텍스트에 최적화된 lucene.english 분석기 사용하여 string 유형으로 인덱싱됩니다. 또한 text 필드 ignoreAbove 옵션을 사용하여 길이가 255 자를 초과하는 문자열을 무시합니다.

    • title string 데이터를 포함하는 필드 제품 이름이나 제목과 같이 공백이 string 많이 포함된 텍스트에 최적화된 lucene.whitespace 분석기 사용하여 유형으로 인덱싱됩니다. The title 필드 uses the multi option to specify the lucene.french 분석기 as a 세컨더리 분석기. 이렇게 하면 $search 쿼리에서 { "value": "title", "multi": "frenchAnalyzer" }path 로 지정하여 프랑스어 쿼리 용어를 더 잘 타겟팅할 수 있습니다.

    • 문자열 배열 포함하고 string 유형으로 인덱싱되는 genres 필드 입니다. MongoDB Search는 기본값으로 lucene.standard 분석기 사용하여 배열 요소를 인덱싱합니다. 인덱싱 배열의 경우 MongoDB Search에는 배열 요소의 데이터 유형 만 필요합니다. 인덱스 정의에서 데이터가 배열 에 포함되도록 지정할 필요는 없습니다.

{
"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": {
"frenchAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"genres": {
"type": "string"
}
}
}
}

다음 인덱스 정의 예시에서는 동적 매핑과 정적 매핑을 결합합니다.

루트 수준에서 동적 매핑을 비활성화하되 정적 매핑을 정의하고 중첩된 필드에 대한 동적 매핑을 활성화합니다.

이 인덱스 정의는 다음과 같습니다.

  • 정적 필드 매핑(dynamic: false)을 지정하며, 명시적으로 언급되지 않은 필드 및 필드 유형은 인덱스되지 않습니다. 따라서 인덱스 정의에는 다음이 포함됩니다.

    • title 필드, string 데이터를 포함하는 string 유형으로 lucene.whitespace 분석기 사용하여 인덱스됩니다. 이 분석기는 제품 이름이나 제목과 같이 공백이 많이 포함된 텍스트에 최적화되어 있습니다.

    • awards 필드: document 유형이며 3개의 하위 필드를 포함합니다. winsnominations 하위 필드에는 숫자 데이터가 포함되고 text 하위 필드에는 string 데이터가 포함됩니다. 문서 의 각 중첩 필드 에 대한 데이터 유형 명시적으로 설정하는 대신 인덱스 정의를 사용하면 문서 의 모든 하위 필드에 대한 동적 매핑을 사용할 수 있습니다. 이렇게 하면 winsnominationsnumber 유형으로, textstring 유형으로 인덱싱됩니다. text 필드 의 데이터는 기본값 으로 lucene.standard 분석기 사용하여 인덱싱됩니다.

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "type": "string",
    "analyzer": "lucene.whitespace"
    },
    "awards": {
    "type": "document",
    "dynamic": true
    }
    }
    }
    }

루트 수준에서 정적 매핑을 설정하고 사용자 지정 typeSet 정의를 사용하여 중첩된 필드 동적으로 매핑합니다.

이 인덱스 정의는 다음과 같습니다.

  • 루트 수준(dynamic: false)에서 정적 필드 매핑을 지정합니다. 즉, mappings.fields 옵션에 지정되지 않은 필드는 인덱싱되지 않습니다.

  • movieAwards이라는 사용자 지정 typeSet 를 사용하여 document 유형의 awards 필드 에 대한 동적 매핑을 정의합니다. awards 필드 에는 세 개의 하위 필드가 포함되어 있습니다: wins, nominations, text. 루트 수준에서 dynamictrue 로 설정하거나 정적 매핑을 사용하여 중첩된 각 필드 를 명시적으로 인덱싱 하여 하위 필드를 자동으로 인덱싱 대신, 인덱스 정의는 typeSet 을 사용하여 document 필드 유형에 대한 동적 매핑을 구성합니다. 이름이 movieAwards인 정의입니다. movieAwards typeSet 는 다음을 수행합니다.

    • 다중 옵션을 사용하여 여러 분석기를 지정하는 string 유형으로 string 필드를 인덱싱합니다: lucene.englishlucene.french.

    • number 유형에 대한 기본값 설정을 사용하여 숫자 필드를 number 유형으로 인덱싱합니다.

      {
      "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"
      }
      ]
      }
      ]
      }