$search
구문
$search
파이프라인 단계의 프로토타입 형식은 다음과 같습니다.
{ $search: { "index": "<index-name>", "<operator-name>"|"<collector-name>": { <operator-specification>|<collector-specification> }, "highlight": { <highlight-options> }, "concurrent": true | false, "count": { <count-options> }, "searchAfter"|"searchBefore": "<encoded-token>", "scoreDetails": true| false, "sort": { <fields-to-sort>: 1 | -1 }, "returnStoredSource": true | false, "tracking": { <tracking-option> } } }
필드
$search
단계에서는 다음 필드가 있는 문서를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
---|---|---|---|
| 객체 | 조건부 | 쿼리에 사용할 컬렉터의 이름입니다. 이 필드의 값으로 콜렉터별 옵션이 포함된 문서를 제공할 수 있습니다. 이 값 또는 |
| 부울 | 옵션 | 전용 검색 노드에서 여러 세그먼트에 걸쳐 검색을 병렬화하세요. 클러스터에 별도의 검색 노드가 없으면 Atlas Search는 이 플래그를 무시합니다. 생략하면 기본값은 |
| 객체 | 옵션 | 결과의 개수를 검색하기 위한 수량 옵션을 지정하는 문서입니다. 자세한 내용은 Atlas Search 결과 수량을 참조하세요. |
| 객체 | 옵션 | 검색어를 원래 문맥에 맞게 표시하기 위한 강조 표시 옵션을 지정하는 문서입니다. |
| 문자열 | 옵션 | 사용할 Atlas Search 인덱스의 이름입니다. 생략하면 기본값은 인덱스 이름을 인덱스 이름의 철자가 틀렸거나 지정된 인덱스가 클러스터에 존재하지 않는 경우 Atlas Search는 결과를 반환하지 않습니다. |
| 객체 | 조건부 | |
| 부울 | 옵션 | 백엔드 데이터베이스에서 전체 문서 조회를 수행할지, 아니면 Atlas Search에서 직접 저장된 소스 필드만 반환할지를 지정하는 플래그입니다. 생략하면 기본값은 |
| 문자열 | 옵션 | |
| 문자열 | 옵션 | |
| 부울 | 옵션 | 결과에서 문서에 대한 자세한 점수 분석을 검색할지 여부를 지정하는 플래그입니다. 생략하면 기본값은 |
| 객체 | 옵션 | Atlas Search 결과를 오름차순 또는 내림차순으로 정렬하기 위한 필드를 지정하는 문서입니다. 날짜, 숫자(정수, 실수, double 값), 문자열 값을 기준으로 정렬할 수 있습니다. 자세히 알아보려면 Atlas Search 결과 정렬을 참조하세요. |
| 객체 | 옵션 | 검색어에 대한 분석 정보를 검색하기 위한 추적 옵션을 지정하는 문서입니다. |
행동
$search
는 표시되는 모든 파이프라인의 첫 번째 단계여야 합니다. $search
는 다음에서 사용할 수 없습니다.
집계 변수
$search
는 쿼리 결과만 반환합니다. $search
쿼리의 메타데이터 결과는 $$SEARCH_META
집계 변수에 저장됩니다. $$SEARCH_META
변수를 사용하여 $search
쿼리에 대한 메타데이터 결과를 볼 수 있습니다.
$$SEARCH_META
집계 변수를 파이프라인의 $search
단계 이후에는 어디서나 사용할 수 있지만, $lookup
또는 $unionWith
단계 이후에는 사용할 수 없습니다. MongoDB 6.0부터는 $searchMeta
단계 이후의 모든 후속 단계에서 $$SEARCH_META
변수를 사용할 수 없습니다.
예시
sample_mflix.movies
collection에 대한 다음 인덱스를 가정합니다.
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
다음 쿼리는 2011년 9월 01일 경에 개봉된 영화를 $search
단계를 사용해 검색합니다. 쿼리에는 다음이 포함됩니다.
$project
단계에서title
및released
를 제외하고 문서의 모든 필드를 제외합니다.$facet
단계에서는 다음을 출력합니다.docs
상위5
개의 검색 결과 배열이 있는 $facet 필드meta
$$SEARCH_META
변수 값이 있는 필드
db.movies.aggregate([ { "$search": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 } } }, { $project: { "_id": 0, "title": 1, "released": 1 } }, { "$limit": 5 }, { "$facet": { "docs": [], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } } ])
{ "docs" : [ { "title" : "Submarino", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Devil's Playground", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Bag It", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Dos", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "We Were Here", "released" : ISODate("2011-09-01T00:00:00Z") } ], "meta" : [ { "count" : { "lowerBound" : NumberLong(17373) } } ] }
$$SEARCH_META
변수 및 그 사용법에 대해 자세히 알아보려면 다음을 참조하세요.
문제 해결
Atlas Search $search
쿼리에 문제가 있는 경우 Atlas Search 오류 문제 해결을 참조하세요.