검색 쿼리와 검색 인덱스 간의 관계 MongoDB Search를 사용하여 MongoDB 컬렉션 내에서 데이터를 얼마나 효율적이고 효과적으로 찾을 수 있는지를 나타냅니다.
MongoDB Search queries specify the criteria for finding documents within a database. MongoDB Search queries take the form of an aggregation pipeline that begins with the $search or $searchMeta pipeline stage. You can use operators, collectors, and search options inside the pipeline stages to implement complex search functionality like full-text search, relevance-based ranking, faceted search, filtering, and sorting.
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 빠른 시작을 참조하세요.
인덱싱할 필드를 선택하세요.
컬렉션에서 쿼리할 필드를 알고 있다면, 정적 매핑을 활성화하고 MongoDB 검색 인덱스 정의에서 필드를 지정하세요. 그렇지 않으면 동적 매핑을 활성화하여 기본값 또는 구성된 필드 유형 세트(typeSet)를 기반으로 모든 필드를 자동으로 인덱스할 수 있습니다.
참고
MongoDB Search 인덱스 동작 및 제한에 대한 자세한 내용은 MongoDB Search 인덱스에 대한 고려 사항을 참조하세요.
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 }
(선택 사항) 텍스트 분석 규칙을 적용합니다.
string 데이터에 대한 특별한 언어, 구문 분석 또는 점수 부여 요구 사항이 있는 경우, 다음 옵션을 인덱스 정의에 적용할 수 있습니다.
MongoDB 검색에서 텍스트 필드를 토큰으로 분할하는 방법을 지정하려면 MongoDB 검색 인덱스에 내장 분석기를 설정할 수 있습니다.
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|autocomplete", 10 "analyzer": "<field-analyzer-name>" // field-specific index analyzer 11 "multi": { 12 "<multi-option-name>": { 13 "type": "string|autocomplete", 14 "analyzer": "<alternate-analyzer-name>" // multi-option specific index analyzer 15 } 16 } 17 } 18 ] 19 } 20 } 21 }
MongoDB 검색에서 텍스트를 토큰으로 분할하는 방식을 사용자 정의하려면, MongoDB 검색 인덱스의 analyzers 필드에 사용자 지정 분석기를 정의할 수 있습니다.
1 { 2 "analyzers": [ 3 { 4 "name": "<custom-analyzer-name>", 5 "tokenizer": { 6 "type": "<tokenizer-type>" 7 } 8 }, 9 ... 10 ] 11 }
MongoDB 검색이 쿼리 중 관련성 점수를 계산할 때 사용하는 유사도 알고리즘을 설정하려면, string 필드에 대해 MongoDB 검색 string 또는 autocomplete 타입으로 인덱싱된 알고리즘을 similarity.type 속성에 지정합니다.
이 옵션은 text, phrase, queryString, autocomplete 연산자가 관련성 점수를 계산하는 방식을 결정합니다. 다양한 유사성 알고리즘에 대해 자세히 알아보려면 점수 세부 정보를 참조하세요.
1 "mappings": { 2 "fields": { 3 "<field-name>": { 4 "type": "string|autocomplete", 5 "similarity": { 6 "type": "bm25|boolean|stableTfl" 7 }, 8 }, 9 "<field-name>": { 10 "type": "string", 11 "multi": { 12 "<multi-option-name>": { 13 "type": "string", 14 "similarity": { 15 "type": "bm25|boolean|stableTfl" 16 } 17 } 18 } 19 } 20 } 21 }
(선택 사항) 쿼리 성능을 최적화하는 옵션을 추가합니다.
대규모 데이터 세트에서 쿼리 성능을 최적화하려면 인덱스 정의에 다음 옵션을 추가하여 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 }
쿼리 정의
After you create an MongoDB Search index for all the fields that you want to search in your collection, you can run a MongoDB Search query. This section demonstrates how to apply your goals for your application's search experience to the JSON syntax of a MongoDB Search query.
MongoDB Search 쿼리 집계 파이프라인 에서 이 섹션의 JSON 구문을 사용하려면 자리 표시자를 유효한 값으로 바꾸고 전체 쿼리 파이프라인 필수 $ 검색 필드 또는 $searchMeta 필드가 포함되어 있는지 확인합니다.
검색 쿼리 실행 방법을 학습하려면 MongoDB Search 빠른 시작을 참조하세요.
초기 MongoDB Search 파이프라인 단계를 선택합니다.
MongoDB Search 쿼리 집계 파이프라인 의 첫 번째 단계는 문서 또는 메타데이터 검색하는지 여부에 따라 $search 또는 $searchMeta 단계여야 합니다.
집계 파이프라인 단계 | 목적 |
|---|---|
Full Text Search의 검색 결과를 반환합니다. | |
검색 결과에 대한 메타데이터를 반환합니다. |
연산자를 적용하여 검색 기준을 정의합니다.
검색 기준을 정의하려면 연산자 또는 수집기를 $search 또는 $searchMeta 파이프라인 단계에 적용해야 합니다.
MongoDB Search 연산자를 사용하면 콘텐츠, 형식 또는 데이터 유형에 따라 클러스터에서 관련 데이터를 찾고 조회할 수 있습니다. 각 필드 유형에 대해 검색을 지원하는 연산자를 알아보려면 연산자 참조 섹션의 표를 참조하세요. 연산자의 쿼리 경로 매개변수에 하나 이상의 인덱스된 검색 필드를 지정해야 합니다.
1 { 2 $search: { 3 "<operator-name>"|"<collector-name>": { 4 <operator-specification>|<collector-specification> 5 } 6 } 7 }
1 { 2 $searchMeta: { 3 "<operator-name>"|"<collector-name>": { 4 <operator-specification>|<collector-specification> 5 } 6 } 7 }
(선택 사항) 옵션 또는 수집기를 적용하여 메타데이터 반환합니다.
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 }
(선택 사항) $ 검색 옵션을 추가하여 결과 순위를 정의합니다.
다음 옵션을 사용하여 $search 결과에 대한 특별 정렬 기능을 구현할 수 있습니다.
옵션 | 사용 사례 |
|---|---|
결과에서 문서의 관련성 점수를 수정하여 MongoDB Search가 관련 결과를 반환하도록 합니다. | |
숫자, 문자열, 날짜 필드 또는 점수별로 결과를 정렬하세요. | |
정렬된 결과를 중지하거나 시작하기 위한 기준점을 설정하세요. |
자세히 알아보기
MongoDB Search 인덱스 및 MongoDB Search 쿼리 빌드 하고 실행 방법을 학습 MongoDB Search 빠른 시작을 참조하세요.
이 튜토리얼에서 언급한 MongoDB Search 쿼리 구성 옵션에 대해 자세히 학습 다음 참조 페이지를 참조하세요.
이 튜토리얼에서 언급한 MongoDB Search 인덱스 구성 옵션에 대해 자세히 학습 다음 참조 페이지를 참조하세요.