Docs Menu
Docs Home
/ /

쿼리 및 인덱스

검색 쿼리와 검색 인덱스 간의 관계 MongoDB Search를 사용하여 MongoDB 컬렉션 내에서 데이터를 얼마나 효율적이고 효과적으로 찾을 수 있는지를 나타냅니다.

MongoDB Search 쿼리는 데이터베이스 내에서 문서를 찾기 위한 기준을 지정합니다. MongoDB Search 쿼리는 또는 $searchMeta 파이프라인 단계로 시작하는 집계 파이프라인 의 형태를 취합니다.$search 파이프라인 단계 내에서 연산자, 수집기검색 옵션을 사용하여 전체 텍스트 검색, 관련성 기반 순위, 패싯 검색 , 필터링 및 정렬과 같은 복잡한 검색 기능을 구현 수 있습니다.

MongoDB Search 쿼리 실행 하려면 먼저 검색 하려는 필드에 MongoDB Search 인덱스 만들어야 합니다. 검색 인덱스는 쿼리 의 검색 기준을 충족하는 문서를 빠르게 조회 최적화된 데이터 구조입니다. 검색 인덱스 정의할 때 인덱스 할 필드와 이러한 필드를 토큰화하는 방법을 지정합니다.

효과적인 검색 쿼리는 적절하게 정의된 검색 인덱스에 달려 있습니다. 검색하려는 필드는 인덱싱되어야 하며, 인덱스 구성에 따라 검색이 정렬, 패싯, 자동 완성 및 기타 검색 기능을 지원하는지 여부가 결정됩니다. 쿼리와 인덱스 설계를 반복적으로 조정하여 검색 정확도와 성능 간의 균형을 맞출 수 있습니다.

이 페이지에서는 MongoDB Search 검색 환경을 계획하고 검색 요구 사항에 맞게 MongoDB Search 인덱스 및 쿼리 정의하는 방법을 설명합니다.

MongoDB Search 구현 계획할 때는 먼저 제공하려는 검색 환경을 정의하세요.

  • 애플리케이션이 수행해야 하는 검색 유형을 명확하게 식별하세요. 블로그 웹사이트에서 글 제목에 대한 전체 텍스트 검색 및 자동 완성 기능을 구축 중이신가요, 아니면 제품 카테고리별 패싯 검색 및 필터링이 필요한 전자상거래 사이트를 위한 검색 기능을 구축 중이신가요?

  • 사용자가 애플리케이션 과 상호 작용 방식을 결정합니다. 빠른 응답 시간이나 정확한 자동 완성 제안과 같이 사용자 경험을 향상시킬 기능의 우선 순위를 지정하세요.

그런 다음, 이러한 사용자 요구 사항에 따라 MongoDB Search 인덱스 및 쿼리의 구조를 결정하는 데 도움이 되는 다음 질문을 고려하세요.

MongoDB Search를 사용하여 데이터를 검색 하려면 먼저 MongoDB Search 쿼리 중에 사용할 MongoDB Search 인덱스를 하나 이상 생성해야 합니다. 이 섹션에서는 MongoDB Search 인덱스의 JSON 구성 구문에 쿼리 기본 설정을 적용 방법을 보여 줍니다.

이 섹션에서 JSON 구문을 인덱스 정의에 사용하려면 자리 표시자를 유효한 값으로 바꾸고 전체 인덱스 정의에 필요한 옵션이 포함되어 있는지확인하세요.

클러스터에 MongoDB Search 인덱스 추가하는 방법을 학습하려면 MongoDB Search 빠른 시작을 참조하세요.

1

컬렉션 에서 쿼리 하려는 필드를 알고 있는 경우 정적 매핑을 활성화 하고 MongoDB Search 인덱스 정의에서 필드를 지정합니다. 그렇지 않으면 동적 매핑을 활성화하여 지원되는 유형의 모든 필드를 자동으로 인덱스 할 수 있습니다.

To learn more, see Dynamic and Static Mappings.

핵심: 컬렉션 에 16MB 이상의 문서가 포함된 경우 MongoDB Search는 데이터를 인덱스 하지 못합니다. 이 문제는 큰 문서에 대한 업데이트 작업으로 인해 변경 스트림 이벤트 16MB BSON 제한을 초과하는 경우에도 발생할 수 있습니다. 이를 방지하려면 다음 권장사항 고려하세요.

  • 하위 문서나 배열의 크기를 최소화하도록 문서를 구조화하세요.

  • 큰 필드, 하위 문서 또는 배열을 업데이트하거나 교체하는 작업을 피하세요.

자세한 내용은 Change Streams 프로덕션 권장사항대용량 문서 크기 줄이기를 참조하세요.

1{
2 "mappings": {
3 "dynamic": true
4 }
5}
1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}
2

특수 언어 또는 구문 분석 요구 사항이 있는 경우 인덱스 정의에 다음 옵션을 적용 할 수 있습니다.

analyzer, searchAnalyzer 또는 fields.<field-name>.analyzer 필드에서 인덱싱 할 문자열 필드에 적용 할 내장 분석기 를 지정합니다.

1{
2 "analyzer": "<index-analyzer-name>", // top-level index analyzer, used if no analyzer is set in the field mappings
3 "searchAnalyzer": "<search-analyzer-name>", // query text analyzer, typically the same as the index analyzer
4 "mappings": {
5 "dynamic": <boolean>,
6 "fields":{
7 "<field-name>": [
8 {
9 "type": "string",
10 "analyzer": "<field-analyzer-name>" // field-specific index analyzer
11 }
12 ]
13 }
14 }
15}

필드 analyzers 에 MongoDB Search 인덱스 에 대한 사용자 지정 분석기를 정의합니다.

1{
2 "analyzers": [
3 {
4 "name": "<custom-analyzer-name>",
5 "tokenizer": {
6 "type": "<tokenizer-type>"
7 }
8 },
9 ...
10 ]
11}

synonyms 필드에서 동일하거나 유사한 의미를 가진 용어의 유의어를 정의하세요.

1{
2 "synonyms": [
3 {
4 "name": "<synonym-mapping-name>",
5 "source": {
6 "collection": "<source-collection-name>"
7 },
8 "analyzer": "<synonym-mapping-analyzer>"
9 }
10 ]
11}
3

대규모 데이터 세트에서 쿼리 성능을 최적화하려면 인덱스 정의에 다음 옵션을 추가하여 MongoDB Search 쿼리 탐색해야 하는 데이터의 양을 제한할 수 있습니다.

numPartitions 옵션을 사용하여 인덱스에 대한 파티션을 구성합니다. 인덱스 분할하면 MongoDB Search는 최적의 방식으로 하위 인덱스 간에 인덱스 객체를 자동으로 배포합니다.

1{
2 "numPartitions": <integer>,
3}

storedSource 옵션을 사용하여 MongoDB Search가 저장 해야 하는 소스 문서 의 필드를 지정합니다.

1{
2 "storedSource": true | false | {
3 "include" | "exclude": [
4 "<field-name>",
5 ...
6 ]
7 }
8}

컬렉션 에서 검색 하려는 모든 필드에 대한 MongoDB Search 인덱스 만든 후 MongoDB Search 쿼리 실행 수 있습니다. 이 섹션에서는 애플리케이션의 검색 경험에 대한 목표 를 MongoDB Search 쿼리의 JSON 구문에 적용 방법을 설명합니다.

MongoDB Search 쿼리 집계 파이프라인 에서 이 섹션의 JSON 구문을 사용하려면 자리 표시자를 유효한 값으로 바꾸고 전체 쿼리 파이프라인 필수 $ 검색 필드 또는 $searchMeta 필드가 포함되어 있는지 확인합니다.

검색 쿼리 실행 방법을 학습하려면 MongoDB Search 빠른 시작을 참조하세요.

1

MongoDB Search 쿼리 집계 파이프라인 의 첫 번째 단계는 문서 또는 메타데이터 검색하는지 여부에 따라 $search 또는 $searchMeta 단계여야 합니다.

집계 파이프라인 단계
목적

Full Text Search의 검색 결과를 반환합니다.

검색 결과에 대한 메타데이터를 반환합니다.

2

검색 기준을 정의하려면 연산자 또는 수집기$search 또는 $searchMeta 파이프라인 단계에 적용해야 합니다.

MongoDB Search 연산자를 사용하면 콘텐츠, 형식 또는 데이터 유형에 따라 클러스터 에서 관련 데이터를 찾고 조회 . 각 필드 유형에 대한 검색을 지원 연산자를 학습 연산자 참조 섹션의 표를 참조하세요. 연산자의 쿼리 경로 매개변수에 인덱싱된 검색 필드를 하나 이상 지정해야 합니다.

1{
2 $search: {
3 "<operator-name>"|"<collector-name>": {
4 <operator-specification>|<collector-specification>
5 }
6 }
7}
[
{
_id: <result-document-id>,
...
},
{
_id: <result-document-id>,
...
},
...
]
1{
2 $searchMeta: {
3 "<operator-name>"|"<collector-name>": {
4 <operator-specification>|<collector-specification>
5 }
6 }
7}
[
{
count: {
total: <results-count>
}
}
]

복합 연산자를 사용하여 여러 연산자를 하나의 작업으로 결합할 수 있습니다. 복합 연산자필터 절을 사용하여 주어진 절과 일치하는 쿼리 출력을 필터링할 수도 있습니다.

3

MongoDB Search 쿼리 에서 메타데이터 조회 하려면 다음 구성 중 하나를 적용 메타데이터 결과 문서 facet 개수 또는( MongoDB Search 연산자) 유형 중에서 선택할 수 있습니다.

검색 결과의 총 개수 또는 하한 개수를 반환하려면 집계 단계에서 개수 옵션을 설정하다.

$searchMeta 단계는 count 메타데이터 결과를 반환하고, $search 단계는 메타데이터 결과를 $$SEARCH_META 집계 변수 에 저장하고 검색 결과만 반환합니다. $$SEARCH_META 변수에서 count 메타데이터 결과를 조회 방법의 예시는 개수 결과를 참조하세요.

1{
2 "$search" | "$searchMeta": {
3 "<operator-name>": {
4 <operator-specifications>
5 },
6 "count": {
7 "type": "lowerBound" | "total",
8 "threshold": <number-of-documents> // Optional
9 }
10 }
11}

값 또는 범위별로 결과를 그룹화하고 이러한 각 그룹의 개수를 반환하는 패싯 쿼리 실행 하려면 집계 단계에서 facet (MongoDB 검색 연산자) 수집기를 사용합니다.

$searchMeta 단계는 facet 메타데이터 결과를 반환하며, $search 단계는 메타데이터 결과를 $$SEARCH_META 집계 변수에 저장하고 검색 결과만 반환합니다. $$SEARCH_META 변수에서 facet 메타데이터 결과를 조회하는 예시는 패싯 결과를 참조하세요.

1{
2 "$search" | "$searchMeta": {
3 "facet": {
4 "facets": {
5 <facet-definitions>
6 }
7 }
8 }
9}
4

다음 옵션을 사용하여 $search 단계 결과에 대한 추가 정보를 조회할 수 있습니다.

옵션
사용 사례

텀을 원래의 컨텍스트에 따라 쿼리 결과의 필드로 표시합니다.

MongoDB Search가 반환하는 각 문서 의 점수에 대한 자세한 분석을 조회합니다.

쿼리 검색어에 대한 분석 정보를 추적하고 제공합니다.

MongoDB Search가 쿼리 충족하기 위해 실행한 루센 쿼리와 쿼리 다양한 실행 단계에서 소비하는 시간에 대한 분석 조회합니다.

5

다음 옵션을 사용하여 $search 결과에 대한 특별 정렬 기능을 구현할 수 있습니다.

옵션
사용 사례

결과에서 문서의 관련성 점수를 수정하여 MongoDB Search가 관련 결과를 반환하도록 합니다.

숫자, 문자열, 날짜 필드 또는 점수별로 결과를 정렬하세요.

정렬된 결과를 중지하거나 시작하기 위한 기준점을 설정하세요.

6

다음 $search 옵션을 사용하여 쿼리 성능을 최적화하세요.

옵션
사용 사례

컬렉션 에 대한 MongoDB Search 인덱스 정의에 지정된 대로 mongot 에 저장된 필드만 검색하여 MongoDB Search 쿼리 보다 효율적으로 실행합니다.

전용 검색 노드에서 여러 세그먼트에 걸쳐 검색을 병렬화하세요.

MongoDB Search 인덱스 및 MongoDB Search 쿼리 빌드 하고 실행 방법을 학습 MongoDB Search 빠른 시작을 참조하세요.

이 튜토리얼에서 언급한 MongoDB Search 쿼리 구성 옵션에 대해 자세히 학습 다음 참조 페이지를 참조하세요.

이 튜토리얼에서 언급한 MongoDB Search 인덱스 구성 옵션에 대해 자세히 학습 다음 참조 페이지를 참조하세요.

돌아가기

패싯