문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

애그리게이션 파이프라인에서 텍스트 검색

이 페이지의 내용

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

참고

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

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

일반 $text 운영자 제한 사항은 운영자 제한을 참조하십시오.

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

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

  • $text 연산자는 단계에서 한 번만 발생할 수 있습니다.

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

  • 텍스트 검색은 기본적으로 일치하는 점수순으로 일치하는 문서를 반환하지 않습니다. 내림차순 점수를 기준으로 정렬하려면 $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 집계 단계를 제공합니다.

← 텍스트 검색 연산자(자체 관리 배포서버)