쿼리 및 인덱스
검색 쿼리와 검색 인덱스 간의 관계 Atlas Search 사용하여 MongoDB 컬렉션 내에서 데이터를 얼마나 효율적이고 효과적으로 찾을 수 있는지를 나타냅니다.
Atlas Search 쿼리는 데이터베이스 내에서 문서를 찾기 위한 기준을 명시합니다. Atlas Search 쿼리는 집계 파이프라인 형태이며, $search
또는 $searchMeta
파이프라인 단계로 시작합니다. 파이프라인 단계 내에서 연산자, 컬렉터, 검색 옵션을 사용하여 전체 텍스트 검색, 연관성 기반 순위, 패싯 검색, 필터링, 정렬과 같은 복잡한 검색 기능을 구현할 수 있습니다.
Atlas Search 쿼리를 실행하기 전에, 검색하려는 필드에 Atlas Search 인덱스를 생성해야 합니다. 검색 인덱스는 쿼리의 검색 조건을 충족하는 문서를 신속하게 조회할 수 있도록 최적화된 데이터 구조입니다. 검색 인덱스를 정의할 때, 인덱싱할 필드와 이러한 필드를 어떻게 토큰화할지를 지정합니다.
효과적인 검색 쿼리는 적절하게 정의된 검색 인덱스에 달려 있습니다. 검색하려는 필드는 인덱싱되어야 하며, 인덱스 구성에 따라 검색이 정렬, 패싯, 자동 완성 및 기타 검색 기능을 지원하는지 여부가 결정됩니다. 쿼리와 인덱스 설계를 반복적으로 조정하여 검색 정확도와 성능 간의 균형을 맞출 수 있습니다.
이 페이지는 Atlas Search 검색 환경을 계획하고, 검색 요구 사항에 맞는 Atlas Search 인덱스와 쿼리를 정의하는 방법을 설명합니다.
검색 경험 계획하기
Atlas Search 구현을 계획할 때, 제공하고자 하는 검색 경험을 먼저 정의하세요.
애플리케이션이 수행해야 하는 검색 유형을 명확하게 식별하세요. 블로그 웹사이트에서 글 제목에 대한 전체 텍스트 검색 및 자동 완성 기능을 구축 중이신가요, 아니면 제품 카테고리별 패싯 검색 및 필터링이 필요한 전자상거래 사이트를 위한 검색 기능을 구축 중이신가요?
사용자가 애플리케이션 과 상호 작용 방식을 결정합니다. 빠른 응답 시간이나 정확한 자동 완성 제안과 같이 사용자 경험을 향상시킬 기능의 우선 순위를 지정하세요.
그런 다음, 사용자 요구 사항에 따라 Atlas Search 인덱스와 쿼리의 구조를 결정하는 데 도움이 되는 다음 질문을 고려하세요.
애플리케이션 사용자가 문서의 내용이나 문서에 대한 메타데이터 반환할지 여부를 고려하세요.
사용자가 문서 콘텐츠를 원하면
$search
집계 단계를 사용하여 검색 기준에 맞는 문서를 반환하세요.사용자가 검색 결과에 대한 메타데이터를 원하면
$searchMeta
단계를 사용하여 일치하는 문서 및 패싯의 사용자 지정 가능한 개수를 반환하세요.
컬렉션 내에서 사용자가 검색할 가능성이 높은 특정 필드를 식별하여 어떤 필드를 인덱스할지 알 수 있습니다. 각 Atlas Search 쿼리는 컬렉션 내의 하나 이상의 지정된 필드에서 추출된 용어가 포함된 단일 Atlas Search 인덱스를 검색합니다. Atlas Search 쿼리를 계획할 때 정적 또는 동적 매핑을 활성화하여 지정된 Atlas 컬렉션의 모든 Atlas 필드를 인덱싱할지, 아니면 주요 필드만 인덱싱할지 결정합니다. 여러 필드를 쿼리하려면 쿼리 경로를 필드 배열로 지정하거나 queryString 연산자를 사용하세요.
사용자의 일반적인 검색 가 Atlas cluster 의 데이터와 정확히 일치하거나, 유사하거나 , 부분적으로 일치할 수 있습니다. 예시를 들어, 영화 검토 애플리케이션 사용자는 정확한 연도의 영화를 필터하다 하거나 자신이 좋아하는 영화와 유사한 영화 추천을 볼 수 있습니다.
사용자가 검색하는 일치 항목의 유형을 결정하여 Atlas Search 쿼리에 사용할 연산자를 결정하세요.
정확히 일치하는 경우, equals 또는 in과 같은 연산자를 사용하여 지정된
query
값과 동일한 용어가 포함된 문서를 찾습니다. 텍스트 연산자를 사용하여query
값에any
또는all
문자열이 포함된 문서를 일치시킬 수도 있습니다.유사 일치를 위해 near, moreLikeThis 또는 phrase와 같은 연산자를 사용하여 숫자 값, 문서 또는 지정된 검색 용어와 유사한 문자열 순서를 포함하는 문서를 일치시킵니다. 범위 연산자를 사용하여 지정된 범위 내의 값을 포함하는 문서를 일치시킬 수 있습니다.
For partial matches, such as search-as-you-type queries, use operators like
autocomplete
Operator, regex, or wildcard to implement search-as-you-type functionality or match terms using regular expressions.복합 연산자를 사용하여 여러 일치 동작을 단일 쿼리에 결합할 수 있습니다.
텍스트 정규화, 다국어 지원, 어간 추출 등이 필요한 애플리케이션에는 Atlas Search 텍스트 분석 도구를 활용하세요.
텍스트 데이터의 언어와 특성에 맞추기 위해 인덱스 정의에서 내장 분석기를 선택하세요. 분석기는 텍스트를 용어 또는 토큰으로 분할하고, 문장 부호와 대문자를 제거하며, 단어를 어근 형태로 변환하는 등 텍스트를 조정할 수 있습니다.
애플리케이션 도메인별 전문 용어 처리 또는 이메일 주소 또는 대시로 구분된 ID와 같은 형식의 텍스트 구문 분석과 같은 특정 요구 사항이 있는 경우 사용자 지정 분석기 를 구성합니다. 사용자 지정 분석기를 활성화 문자별로 텍스트를 필터하다 하거나, 각 토큰 청크 에 포함할 문자 수를 정의하거나, 형태소 분석 또는 편집을 활성화 .
유의어를 정의하여 동일하거나 유사한 의미를 가진 용어의 검색 정확도를 향상시키세요.
사용자의 필터, 정렬 또는 관련성 요구에 따라 검색 결과의 표시 방식을 조정할 수 있습니다.
점수 쿼리 옵션을 사용하여 문서의 관련성 점수를 수정하고 사용자가 결과를 보는 순서에 영향을 줄 수 있습니다. Atlas Search 쿼리는 결과 집합의 모든 문서에 관련성 기반 점수를 부여하고, 점수가 가장 높은 문서부터 가장 낮은 문서까지 순서대로 반환합니다.
사용자가 오름차순 또는 내림차순으로 정렬할 가능성이 높은 인덱싱된 필드(예: 날짜 또는 숫자 필드)에 대해 정렬 쿼리 옵션을 설정합니다.
searchBefore 또는 searchAfter 쿼리 옵션을 사용하여 사용자가 순차적으로 탐색하거나 건너뛸 수 있는 페이지 세트로 결과를 표시합니다.
패싯 수집기를 사용하여 사용자가 범주 또는 다른 차원별로 결과를 필터링할 수 있도록 합니다. 이렇게 하면 검색 결과의 관련성이 크게 향상되어 사용자에게 보다 안내된 검색 경험을 제공할 수 있습니다.
Atlas Search 쿼리 성능은 인덱스 구성과 쿼리의 복잡성에 영향을 받습니다. 애플리케이션의 검색 기능에 중요한 필드에 인덱싱을 집중하고 쿼리 복잡성과 속도 간의 논리적 균형을 목표로 하세요.
성능을 더욱 최적화하려면 다음 쿼리 옵션을 고려하세요.
동시 쿼리 옵션을 사용하여 쿼리를 평가할 때 실행되는 동시 검색 요청의 수를 설정합니다. 이 옵션은 복잡한 쿼리 또는 대규모 데이터 세트에 유용합니다.
returnStoredSource 쿼리 옵션과 storedSource 인덱스 옵션을 함께 사용하여 인덱스의 일부로 저장된 원본 소스 문서를 검색 결과와 함께 반환할지 여부를 결정합니다. 이 옵션은 검색 기준에 따라 요약 또는 하이라이트를 표시하는 애플리케이션에 유용합니다.
numPartitions 인덱스 옵션을 사용하여 인덱스를 분할하고, 인덱스 객체를 하위 인덱스 간에 최적의 방식으로 분배합니다.
쿼리 성능을 최적화하는 방법에 대한 자세한 권장 사항은 Atlas Search 쿼리 성능을 참조하세요.
인덱스 정의
Atlas Search를 사용하여 데이터를 검색하기 전에, Atlas Search 쿼리에서 사용할 하나 이상의 Atlas Search 검색 인덱스를 생성해야 합니다. 이 섹션에서는 Atlas Search 인덱스의 JSON 구성 쿼리 구문에 기본 설정을 적용하는 방법을 보여줍니다.
이 섹션에서 JSON 구문을 인덱스 정의에 사용하려면 자리 표시자를 유효한 값으로 바꾸고 전체 인덱스 정의에 필요한 옵션이 포함되어 있는지확인하세요.
Atlas cluster 에 Atlas Search 인덱스 추가하는 방법을 학습 Atlas Search 빠른 시작을 참조하세요.
인덱싱할 필드를 선택하세요.
컬렉션에서 쿼리할 필드를 알고 있다면, 정적 매핑을 활성화하고 Atlas Search 인덱스 정의에서 필드를 지정하세요. 그렇지 않으면 동적 매핑을 활성화하여 지원되는 유형의 모든 필드를 자동으로 인덱싱할 수 있습니다.
자세한 내용을 보려면 정적 및 동적 매핑을 참조하세요.
참고
컬렉션에 16MB 이상의 문서가 포함되어 있는 경우 Atlas Search가 데이터 색인에 실패합니다. 대용량 문서에 대한 업데이트 작업으로 인해 변경 스트림 이벤트가 16MB BSON 제한을 초과할 때 이 문제가 발생할 수 있습니다. 이를 방지하려면 다음 권장사항을 고려하세요.
하위 문서나 배열의 크기를 최소화하도록 문서를 구조화하세요.
큰 필드, 하위 문서 또는 배열을 업데이트하거나 교체하는 작업을 피하세요.
자세한 내용은 Change Streams 프로덕션 권장사항 및 대용량 문서 크기 줄이기를 참조하세요.
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 }
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 }
(선택 사항) 텍스트 분석 규칙을 적용합니다.
특수 언어 또는 구문 분석 요구 사항이 있는 경우 인덱스 정의에 다음 옵션을 적용 할 수 있습니다.
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 }
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 }
(선택 사항) 쿼리 성능을 최적화하기 위한 옵션을 추가합니다.
대규모 데이터 집합에서 쿼리 성능을 최적화하려면 인덱스 정의에 다음 옵션을 추가하여 Atlas Search 쿼리가 탐색해야 하는 데이터의 양을 제한할 수 있습니다.
numPartitions 옵션을 사용하여 인덱스의 파티션을 구성하세요. 인덱스를 분할하면 Atlas Search는 최적의 방식으로 하위 인덱스 간에 인덱스 객체를 자동으로 분배합니다.
1 { 2 "numPartitions": <integer>, 3 }
storedSource 옵션을 사용하여 Atlas Search 저장 해야 하는 소스 문서 의 필드를 지정합니다.
1 { 2 "storedSource": true | false | { 3 "include" | "exclude": [ 4 "<field-name>", 5 ... 6 ] 7 } 8 }
쿼리 정의
컬렉션에서 검색하고자 하는 모든 필드에 대해 Atlas Search 인덱스를 생성한 후, Atlas Search 쿼리를 실행할 수 있습니다. 이 섹션에서는 애플리케이션의 검색 경험 목표를 Atlas Search 쿼리의 JSON 구문에 적용하는 방법을 설명합니다.
Atlas Search 쿼리 집계 파이프라인에서 이 섹션의 JSON 구문을 사용하려면 자리 표시자를 유효한 값으로 바꾸고 전체 쿼리 파이프라인에 필수 $search 필드 또는 $searchMeta 필드가 포함되어 있는지 확인하세요.
Search 쿼리 실행 방법을 학습하려면 Atlas Search 빠른 시작을 참조하세요.
Atlas Search 파이프라인의 초기 단계를 선택하세요.
Atlas Search 쿼리 집계 파이프라인 의 첫 번째 단계는 문서를 검색하는지, 아니면 메타데이터 검색하는지에 따라 $search
또는 $searchMeta
단계여야 합니다.
집계 파이프라인 단계 | 목적 |
---|---|
Full Text Search의 검색 결과를 반환합니다. | |
검색 결과에 대한 메타데이터를 반환합니다. |
연산자를 적용하여 검색 기준을 정의합니다.
검색 기준을 정의하려면 연산자 또는 수집기를 $search
또는 $searchMeta
파이프라인 단계에 적용해야 합니다.
Atlas Search 연산자를 사용하면 콘텐츠, 형식 또는 데이터 유형에 따라 Atlas 클러스터에서 관련 데이터를 찾고 조회할 수 있습니다. 각 필드 유형에 대해 검색을 지원하는 연산자를 알아보려면 연산자 참조 섹션의 표를 확인하세요. 연산자의 쿼리 경로 매개변수에 하나 이상의 인덱싱된 검색 필드를 지정해야 합니다.
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> } } ]
(선택 사항) 옵션 또는 수집기를 적용하여 메타데이터 반환합니다.
Atlas 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 }
값 또는 범위별로 결과를 그룹화하고 각 그룹의 개수를 반환하는 패싯 쿼리를 실행하려면 집계 단계에서 패싯 수집기를 사용하세요.
$searchMeta
단계는 facet
메타데이터 결과를 반환하며, $search
단계는 메타데이터 결과를 $$SEARCH_META 집계 변수에 저장하고 검색 결과만 반환합니다. $$SEARCH_META
변수에서 facet
메타데이터 결과를 조회하는 예시는 패싯 결과를 참조하세요.
1 { 2 "$search" | "$searchMeta": { 3 "facet": { 4 "facets": { 5 <facet-definitions> 6 } 7 } 8 } 9 }
(선택 사항) $search 단계에 조회 옵션을 추가하여 Atlas Search 쿼리에 대한 추가 정보를 조회합니다.
다음 옵션을 사용하여 $search
단계 결과에 대한 추가 정보를 조회할 수 있습니다.
(선택 사항) $search 옵션을 추가하여 결과 순위를 정의합니다.
다음 옵션을 사용하여 $search
결과에 대한 특별 정렬 기능을 구현할 수 있습니다.
옵션 | 사용 사례 |
---|---|
결과에서 문서의 관련성 점수를 수정하여 Atlas Search 관련 결과를 반환하도록 합니다. | |
숫자, 문자열, 날짜 필드 또는 점수별로 결과를 정렬하세요. | |
정렬된 결과를 중지하거나 시작하기 위한 기준점을 설정하세요. |
자세히 알아보기
Atlas Search 인덱스와 Atlas Search 쿼리를 구축하고 실행하는 방법을 학습하려면 Atlas Search 빠른 시작을 참조하세요.
이 튜토리얼에서 언급한 Atlas Search 쿼리 구성 옵션에 대해 자세히 학습 다음 참조 페이지를 참조하세요.
이 튜토리얼에서 언급된 Atlas Search 인덱스 구성 옵션에 대해 자세히 학습하려면 다음 참조 페이지를 참조하세요.