Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

자체 관리형 배포의 집계 파이프라인에서 $text

이 페이지의 내용

  • 제한 사항
  • 텍스트 점수
  • 예시
  • $search Atlas 검색의 스테이지

참고

이 페이지에서는 자체 관리형(Atlas 관리가 아닌) 배포서버를 위한 일반 텍스트 쿼리 기능에 대해 설명합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우, MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다.

집계 파이프라인에서 텍스트 검색은 $match 단계에서 $text 쿼리 연산자를 사용할 수 있습니다.

일반 $text 연산자 제한 사항은 연산자 제한을 참조하세요.

또한 집계 파이프라인의 텍스트 검색에는 다음과 같은 제한 사항이 있습니다:

  • $text를 포함하는 $match 단계는 파이프라인의 첫 번째 단계여야 합니다.

  • $text 연산자는 단계에서 한 번만 나타날 수 있습니다.

  • $text 연산자 표현식은 $or 또는 $not 표현식에 나타날 수 없습니다.

  • $text기본적으로 일치하는 점수순으로 일치하는 문서를 반환하지 않습니다. 내림차순 점수를 기준으로 정렬하려면 $sort 단계에서 $meta 집계 표현식을 사용합니다.

$text 연산자는 각 결과 문서에 점수를 할당합니다. 점수는 주어진 쿼리에 대한 문서의 관련성을 나타냅니다. 점수는 프로젝션 표현식뿐만 아니라 $sort 파이프라인 사양의 일부가 될 수 있습니다. { $meta: "textScore" } 표현식은 $text 작업 처리에 대한 정보를 제공합니다. 프로젝션 또는 정렬을 위해 점수에 액세스하는 방법에 대한 자세한 내용은 $meta를 참조하세요.

메타데이터는 $text 연산을 포함하는 $match 단계 이후에만 사용할 수 있습니다.

다음 예에서는 subject 필드에 텍스트 인덱스가 있는 컬렉션 articles 을 가정합니다.

db.articles.createIndex( { subject: "text" } )

다음 집계는 $match 단계에서 cake 용어를 검색하고 $group 단계에서 일치하는 문서에 대한 총 views 를 계산합니다.

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake" } } },
{ $group: { _id: null, views: { $sum: "$views" } } }
]
)

텍스트 검색 점수를 기준으로 정렬하려면 $sort 단계에 {$meta: "textScore"} 표현식을 포함합니다. 다음 예시는 cake 또는 tea이라는 용어를 일치시키고, textScore를 내림차순으로 정렬하며, 결과 집합에서 title 필드만 반환합니다.

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake tea" } } },
{ $sort: { score: { $meta: "textScore" } } },
{ $project: { title: 1, _id: 0 } }
]
)

지정된 메타데이터에 따라 정렬 순서가 결정됩니다. 예를 들어 "textScore" 메타데이터는 내림차순으로 정렬됩니다. 메타데이터에 대한 자세한 내용과 메타데이터의 기본 정렬 순서를 재정의하는 예시는 $meta를 참조하세요.

"textScore" 메타데이터는 $text 연산을 포함하는 $match 단계 이후의 프로젝션, 정렬 및 조건에 사용할 수 있습니다.

다음 예시에서는 cake 또는 tea 용어와 일치하고 titlescore 필드를 프로젝션한 다음 score1.0보다 큰 문서만 반환합니다.

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake tea" } } },
{ $project: { title: 1, _id: 0, score: { $meta: "textScore" } } },
{ $match: { score: { $gt: 1.0 } } }
]
)

다음 집계는 $match 단계에서 claro 용어가 아닌 saber 용어가 포함된 문서를 스페인어로 검색하고 $group 단계에서 일치하는 문서에 대한 총 views를 계산합니다.

db.articles.aggregate(
[
{ $match: { $text: { $search: "saber -claro", $language: "es" } } },
{ $group: { _id: null, views: { $sum: "$views" } } }
]
)

MongoDB Atlas에서 호스팅되는 데이터의 경우 Atlas Search는 컬렉션에서 전문 검색을 수행할 수 있는 $search 집계 단계를 제공합니다.

돌아가기

$text