쿼리 참조
파이프라인 단계
Atlas Search 쿼리는 집계 파이프라인 단계의 형태를 취합니다. Atlas Search
$search
및
$searchMeta
단계를 제공하며, 이 두 단계는
$lookup
및
$unionWith
하위 파이프라인을 포함한 모든 쿼리 파이프라인 에서 첫 번째 단계여야 합니다. 이러한 단계는 쿼리 파이프라인 의 다른 집계 파이프라인 단계 와 함께 사용할 수 있습니다.
선택한 파이프라인 단계에 따라 쿼리는 전체 텍스트 검색의 검색 결과 또는 검색 결과에 대한 메타데이터를 반환합니다.
집계 파이프라인 단계 | 목적 |
---|---|
Full Text Search의 검색 결과를 반환합니다. | |
검색 결과에 대한 메타데이터를 반환합니다. |
연산자와 콜렉터
Atlas Search 또한 및 집계 파이프라인 $search
단계 내에서 사용할 수 있는 $searchMeta
쿼리 연산자 및 수집기를
제공합니다. Atlas Search 연산자를 사용하면 Atlas cluster 의 컬렉션 에서 관련 데이터를 찾고 조회 수 있습니다. 수집기는 검색 메타데이터 결과를 나타내는 문서 반환합니다.
Atlas Search 연산자를 사용하여 용어, 구문, 지리적 도형 및 점, 숫자 값, 유사 문서, 동의어 등 쿼리 수 있습니다.
정규식 및 와일드카드 표현식을 사용하여 검색 할 수도 있습니다. Atlas Search 복합 연산자 사용하면 $search
단계 내에서 여러 연산자를 결합하여 복잡한 검색 수행하고, Atlas Search 에서 반환된 문서에 반드시 있어야 하는 항목, 없어야 하는 항목 또는 존재해야 하는 항목을 기준으로 데이터를 필터하다 . 복합 연산자 사용하여 $search
단계 자체에 있는 문서를 일치시키거나 필터하다 수도 있습니다. $search
다음에
$match
를 실행하는 것은 복합
연산자 사용하여
$search
를 실행 보다 성능이 떨어집니다.
연산자 및 수집기에 대해 자세히 학습 연산자 및 수집기를 참조하세요.
쿼리 처리
- 동일한 노드의
mongod
및mongot
쿼리를 실행할 때 Atlas Search는 구성된 읽기 기본 설정을 사용하여 쿼리를 실행할 노드를 식별합니다. 쿼리는 먼저 MongoDB 프로세스인 복제본 세트 클러스터의 경우
mongod
, 샤딩된 클러스터의 경우mongos
로 이동합니다.복제본 세트 클러스터의 경우 MongoDB 프로세스는 쿼리를 동일한 노드의
mongot
으로 라우팅합니다. 샤딩된 클러스터에서는 클러스터 데이터가 여러mongod
인스턴스에 걸쳐 분할되며, 각mongot
은 동일한 노드에 있는mongod
의 데이터에 대해서만 알고 있습니다. 따라서 특정 샤드를 대상으로 하는 Atlas Search 쿼리를 실행할 수 없습니다.mongos
는 쿼리를 모든 샤드로 전달하여 이러한 분산 수집 쿼리를 만듭니다. 구역을 사용하여 클러스터의 샤드 하위 집합에 샤딩된 컬렉션을 분산하는 경우, Atlas Search는 쿼리 중인 컬렉션의 샤드가 포함된 구역으로 쿼리를 라우팅하고 컬렉션이 있는 샤드에서만$search
쿼리를 실행합니다.Atlas Search는 검색 및 점수 산정을 수행하고 일치하는 결과에 대한 문서 ID 및 기타 검색 메타데이터를
mongod
로 반환합니다. 그런 다음mongod
는 일치하는 결과에 대해 암시적으로 전체 문서 조회를 수행하여 결과를 클라이언트에 반환합니다. 쿼리에서$search
동시 옵션을 사용하는 경우 Atlas Search는 쿼리 내 병렬 처리를 활성화합니다. 자세한 사항은 세그먼트간 쿼리 실행 병렬화를 참조하세요.- 다른 노드의
mongod
및mongot
쿼리를 실행하면 구성된 읽기 설정
에 따라 쿼리가 먼저
mongod
로 이동합니다.mongod
프로세스는 동일한 노드의 로드 밸런서를 통해 검색 쿼리를 라우팅하며, 로드 밸런서는mongot
프로세스 전체에 요청을 분산합니다.Atlas Search
mongot
프로세스는 검색 및 점수 산정을 수행하고 일치 결과에 대한 문서 ID와 메타데이터를mongod
로 반환합니다. 그런 다음mongod
는 일치하는 결과에 대한 전체 문서 조회를 수행하고 결과를 클라이언트에 반환합니다. 쿼리에서$search
동시 옵션을 사용하는 경우 Atlas Search는 쿼리 내 병렬 처리를 활성화합니다. 자세한 내용은 세그먼트간 쿼리 실행 병렬 처리를 참조하세요.
득점
Atlas Search는 결과 세트의 모든 문서에 관련성 기반 점수를 부여합니다. 관련성 기반 점수 매기기를 통해 Atlas Search는 가장 높은 점수에서 가장 낮은 점수 순서로 문서를 반환할 수 있습니다. Atlas Search는 쿼리어가 문서에 자주 나타나는 경우 문서 점수를 높이고 컬렉션의 여러 문서에 쿼리어가 나타나면 낮은 점수를 줍니다. Atlas Search는 또한 부스트, 감쇠(decaying) 또는 또는 기타 수정 옵션을 통해 관련성 기반의 기본 점수를 사용자 맞춤형으로 조정하는 것도 가능합니다. 결과 점수 사용자 지정에 대해 자세히 알아보려면 결과에서 문서 점수 매기기를 참조하세요.
참조 항목: 보면서 배우기
지원되는 클라이언트
다음 클라이언트를 사용하여 Atlas Search 쿼리를 만들고 실행 수 있습니다.
쿼리 문제 해결
빈 결과 집합
mongot
은(는) 오류를 반환하지 않지만 $search
쿼리가 다음과 같은 경우 빈 결과 집합을 반환합니다.
존재하지 않는 인덱스 참조합니다. 쿼리 에서 이름으로 인덱스 지정하지 않으면 Atlas Search 기본적으로 이름이
default
인 인덱스 사용합니다.default
(이)라는 인덱스 없거나 지정한 인덱스 존재하지 않는 경우 Atlas Search 오류를 반환하지 않고 빈 결과 설정하다 반환합니다.index
옵션을 사용하여 이름으로 유효한 인덱스 지정할 수 있습니다.인덱싱되지 않은 필드를 지정합니다. 인덱싱되지 않은 필드에 대해 쿼리를 실행하는 경우 Atlas Search는 오류를 반환하지 않고 빈 결과 집합을 반환합니다. 인덱싱된 필드만
path
매개변수의 값으로 지정해야 합니다. collection에 대한 인덱스 정의에서 동적 매핑 을 활성화하여 collection의 모든 동적으로 인덱싱 가능한 필드 가 자동으로 인덱싱되도록 할 수 있습니다. 자세한 내용은 동적 매핑을 참조하세요.string
유형으로 인덱싱되지 않은 필드 경로에text
연산자를 사용합니다. 필드가string
이외의 Atlas Search 필드 유형(예:stringFacet
또는autocomplete
)으로 인덱싱되는 경우 Atlas Search는 오류를 반환하지 않고 빈 결과 집합을 반환합니다. 텍스트 연산자를 사용하여 필드를string
쿼리하려면 BSON 데이터 유형 값을 사용하여 필드를 문자열 유형으로 인덱싱 해야 합니다 .
PlanExecutor
오류
mongot
은(는) $search
쿼리가 다음과 같은 경우
PlanExecutor
오류를 반환합니다.
잘못된 데이터 유형으로 인덱싱되는 필드를 지정합니다. 이 경우 쿼리를 실행하면 Atlas Search는 잘못 인덱싱된 필드와 올바른 데이터 유형을 식별하는 오류 메시지를 반환합니다. 예를 들면 다음과 같습니다.
PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because it was not indexed as a "stringFacet" field. 예를 들어
string
,number
또는date
필드에 대해 패싯쿼리를 실행하려면
stringFacet
,number
및date
과 같은 해당 Atlas Search 필드 유형을 사용하여 필드에 대한 인덱스를 만듭니다. . 자세한 내용은 지원되는 데이터 유형과 지원되지 않는 데이터 유형을 참조하세요.