Docs Menu
Docs Home
/ /

Atlas Search 쿼리 실행

이 가이드 에서는 Rust 운전자 사용하여 컬렉션 에서 Atlas Search 쿼리를 실행 방법을 학습 수 있습니다. Atlas Search 사용하면 MongoDB Atlas 에서 호스팅되는 컬렉션에서 전체 텍스트 검색을 수행할 수 있습니다. Atlas Search 인덱스는 검색 동작과 인덱스 할 필드를 지정합니다.

이 가이드의 예시에서는 Atlas 샘플 데이터 세트sample_mflix 데이터베이스에 있는 movies 컬렉션을 사용합니다. 무료 MongoDB Atlas 클러스터를 생성하고 샘플 데이터 세트를 로드하는 방법을 알아보려면 Atlas 시작하기 가이드를 참조하세요.

이 섹션은 집계 파이프라인을 생성하여 컬렉션에서 Atlas Search 쿼리를 실행하는 방법을 설명합니다.

Atlas Search 쿼리 실행 하려면 컬렉션 에 Atlas Search 인덱스 만들어야 합니다. 프로그래밍 방식으로 Atlas Search 인덱스 만드는 방법을 학습 인덱스 가이드 의Atlas Search 및 Vector Search 인덱스 섹션을 참조하세요. <search index name> 이 가이드 의 코드 예제에서 자리 표시자를 Atlas Search 인덱스 의 이름으로 바꿀 수 있습니다.

Atlas Search 인덱스 생성한 후 파이프라인 단계 배열 에 $search 단계를 추가하여 검색 기준을 지정합니다. 그런 다음 aggregate() 메서드를 호출하고 파이프라인 배열 매개 변수로 전달합니다.

집계 작업에 대해 자세히 학습 애그리게이션 가이드 참조하세요.

이 예시 다음 조치를 수행하여 Atlas Search 쿼리 실행합니다.

  • title 필드 에 "Alabama"라는 단어가 포함된 문서를 쿼리 하도록 운전자 에 지시하는 $search 단계를 생성합니다.

  • 드라이버가 쿼리 결과에 title 필드를 포함하도록 지시하는 $project 단계를 만듭니다.

  • 파이프라인 단계를 aggregate() 메서드에 전달하고 결과를 출력합니다.

use mongodb::{
bson::{doc, Document},
Client, Collection,
};
use futures::stream::TryStreamExt;
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
// Replace the uri string with your connection string
let uri = "<connection string uri>";
let client = Client::with_uri_str(uri).await?;
let my_coll: Collection<Document> = client
.database("sample_mflix")
.collection("movies");
// Defines the Atlas Search query
let pipeline = vec![
doc! {
"$search": {
"index": "<search index name>",
"text": {
"query": "Alabama",
"path": "title"
}
}
},
doc! {
"$project": {
"title": 1,
"_id": 1
}
}
];
// Runs the aggregation pipeline
let mut cursor = my_coll.aggregate(pipeline).await?;
// Prints the results
while let Some(doc) = cursor.try_next().await? {
println!("{}", doc);
}
Ok(())
}
{
"_id": ObjectId("..."),
"title": "Alabama Moon"
}
{
"_id": ObjectId("..."),
"title": "Crazy in Alabama"
}
{
"_id": ObjectId("..."),
"title": "Sweet Home Alabama"
}

파이프라인 단계를 사용하여 $searchMeta Atlas Search 결과에서 메타데이터 만 반환하는 $searchMeta 집계 단계를 만듭니다.

MongoDB Atlas v4.4.11 이상에서만 사용 가능

이 집계 파이프라인 연산자는 v4.4.11 이상을 실행하는 MongoDB Atlas 클러스터에서만 사용할 수 있습니다.

다음 예시 Atlas Search 집계 단계에 대한 메타데이터 조회 방법을 보여줍니다.

use mongodb::{
bson::{doc, Document, DateTime},
Client, Collection,
};
use futures::stream::TryStreamExt;
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
// Replace the uri string with your connection string
let uri = "<connection string uri>";
let client = Client::with_uri_str(uri).await?;
let my_coll: Collection<Document> = client
.database("sample_mflix")
.collection("movies");
// Defines the $searchMeta pipeline stage
let pipeline = vec![
doc! {
"$searchMeta": {
"index": "<search index name>",
"near": {
"path": "released",
"origin": DateTime::parse_rfc3339_str("2011-09-01T00:00:00.000Z")
.unwrap(),
"pivot": 7776000000i64
}
}
}
];
let mut cursor = my_coll.aggregate(pipeline).await?;
while let Some(doc) = cursor.try_next().await? {
println!("{}", doc);
}
Ok(())
}
{
"count": 3,
"hits": [
{
"id": ObjectId("..."),
"score": 1.0
},
{
"id": ObjectId("..."),
"score": 1.0
},
{
"id": ObjectId("..."),
"score": 1.0
}
]
}

MongoDB Rust 운전자 Atlas Search 파이프라인 단계를 생성하기 위한 헬퍼 메서드와 빌더 제공합니다. 이러한 헬퍼를 사용하면 Rust의 유형 시스템을 사용하여 복잡한 검색 쿼리를 구성하여 컴파일 타임의 안전성을 높일 수 있습니다.

Rust 운전자 BSON 문서 구성을 통해 다음과 같은 Atlas Search 연산자를 지원합니다.

연산자
설명

불완전한 입력 문자열에서 일련의 문자가 포함된 단어나 구를 검색 합니다.

두 개 이상의 연산자를 단일 쿼리로 결합합니다.

필드 지정한 값과 일치하는지 확인합니다.

문서에 인덱싱된 지정 필드 이름에 대한 경로가 있는지 테스트합니다.

위치 별 검색 허용하는 지리적 쿼리의 경우.

검색 기준과 일치하는 텍스트 스니펫을 반환하려면 검색 를 강조 표시해야 하는 사용자 인터페이스에 유용합니다.

지정된 경로에서 BSON 번호, 날짜, 부울, ObjectId, uuid 또는 문자열 값의 배열 검색 하고 필드 값이 지정된 배열 의 임의 값과 같은 문서를 반환합니다.

입력 문서와 유사한 문서를 반환합니다.

숫자, 날짜 및 GeoJSON 포인트 값을 쿼리하고 점수를 매기는 기능을 지원합니다.

인덱스 구성에 지정된 분석기 사용하여 정렬된 용어 시퀀스가 포함된 문서를 검색 합니다.

인덱싱된 필드와 값의 조합을 쿼리할 수 있습니다.

숫자, 날짜 및 문자열 값을 쿼리하고 점수를 매길 수 있도록 지원합니다.

쿼리 필드 정규 표현식 으로 해석합니다.

인덱스 구성에서 지정한 분석기 사용하여 전체 텍스트 검색 수행합니다.

검색 문자열에 모든 문자와 일치할 수 있는 특수 문자를 사용하는 쿼리를 활성화합니다.

참고

Atlas 샘플 데이터 세트

이 예시 Atlas 샘플 데이터 세트의 sample_mflix.movies 컬렉션 사용합니다. 무료 계층 Atlas cluster 설정하다 하고 샘플 데이터 세트를 로드하는 방법을 학습 Atlas 설명서에서 Atlas 시작하기 튜토리얼을 참조하세요.

이 예시 실행 하려면 먼저 movies 컬렉션 에 다음 정의가 있는 Atlas Search 인덱스 만들어야 합니다.

{
"mappings": {
"dynamic": true,
"fields": {
"title": {
"analyzer": "lucene.keyword",
"type": "string"
},
"genres": {
"normalizer": "lowercase",
"type": "token"
}
}
}
}

Atlas Search 인덱스 생성에 대해 자세히 학습하려면 인덱스 가이드의 Atlas Search 및 Vector Search 인덱스 섹션을 참조하세요.

코드의 <search index name> 자리 표시자를 Atlas Search 인덱스 의 이름으로 바꿀 수 있습니다.

다음 코드는 다음 사양의 $search 단계를 생성합니다.

  • genres 배열 "Comedy"가 포함되어 있는지 확인합니다.

  • fullplot 필드 에서 "new york"구문을 검색합니다.

  • 1950 ~ 2000 사이의 year 값과 일치합니다.

  • "Love"로 시작하는 title 값을 검색합니다.

use mongodb::{
bson::{doc, Document},
Client, Collection,
};
use futures::stream::TryStreamExt;
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
// Replace the uri string with your connection string
let uri = "<connection string uri>";
let client = Client::with_uri_str(uri).await?;
let my_coll: Collection<Document> = client
.database("sample_mflix")
.collection("movies");
// Creates a complex search using multiple operators
let search_stage = doc! {
"$search": {
"index": "<search index name>",
"compound": {
"must": [
{
"equals": {
"path": "genres",
"value": "Comedy"
}
},
{
"phrase": {
"path": "fullplot",
"query": "new york"
}
},
{
"range": {
"path": "year",
"gte": 1950,
"lte": 2000
}
},
{
"wildcard": {
"path": "title",
"query": "Love*"
}
}
]
}
}
};
let project_stage = doc! {
"$project": {
"title": 1,
"year": 1,
"genres": 1,
"_id": 1
}
};
let pipeline = vec![search_stage, project_stage];
let mut cursor = my_coll.aggregate(pipeline).await?;
while let Some(doc) = cursor.try_next().await? {
println!("{}", doc);
}
Ok(())
}
{
"_id": ObjectId("..."),
"genres": ["Comedy", "Romance"],
"title": "Love at First Bite",
"year": 1979
}
{
"_id": ObjectId("..."),
"genres": ["Comedy", "Drama"],
"title": "Love Affair",
"year": 1994
}

Atlas Search 연산자에 대해 자세히 학습 Atlas Search 연산자 설명서를 참조하세요.

Atlas Search 에 대해 자세히 학습 Atlas 설명서에서 Atlas Search 참조하세요.

이 가이드 에 언급된 메서드에 학습 보려면 다음 API 설명서를 참조하세요.

돌아가기

Indexes

이 페이지의 내용