Docs Menu
Docs Home
/ /

$text(자체 관리 배포서버)

참고

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

이 페이지에서는 자체 관리 배포가 가능한 $text 연산자에 대해 설명합니다.

$text

$text 텍스트 인덱스 로 인덱싱된 필드에 텍스트 쿼리 수행합니다.

다음 환경에서 호스팅되는 배포에 $text 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

$text 표현식의 구문은 다음과 같습니다.

{
$text: {
$search: <string>,
$language: <string>,
$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>
}
}

$text 연산자 이러한 필드를 허용합니다.

필드
유형
설명

$search

문자열

MongoDB 텍스트 인덱스 쿼리 위해 구문 분석하고 사용하는 용어의 문자열입니다. MongoDB 정확한 문자열을 OR 지정하지 않는 한 용어에 대해 논리적 쿼리 수행합니다.자세한 내용은 동작을 참조하세요.

$language

문자열

선택 사항. 중지 단어, 형태소 분석기 및 토크나이저 규칙을 결정하는 언어 입니다. 기본값은 인덱스 언어 입니다. 지원되는 언어는 자체 관리 배포서버의 텍스트 검색 언어를 참조하세요.

default_language 값을 none으로 지정하면 텍스트 인덱스는 중단어(stop word)를 포함하여 필드에 있는 각 단어를 구문 분석하고 접미사 어간(stemming)은 무시합니다.

$caseSensitive

부울

선택 사항. 대소문자 구분을 활성화합니다. 기본값은 false 입니다.대소문자 구분 안 함을 참조하세요.

$diacriticSensitive

부울

3 선택 사항. 버전 텍스트 인덱스에 대해 발음 부호 민감도를 활성화합니다. 기본값은 입니다.false 이전 텍스트 인덱스 버전은 항상 발음 구별 부호를 구분합니다. 분음 부호 무시를 참조하세요.

기본값 으로 는 점수별로$text 결과를 정렬하지 않습니다. 점수 정렬에 대한 자세한 내용은 텍스트 점수를 참조하세요.

  • 쿼리 $text 표현식 하나만 지정할 수 있습니다.

  • $text $nor 표현식에 나타날 수 없습니다.

  • $text 쿼리 또는 프로젝션 표현식에 $elemMatch 나타날 수 없습니다.

  • $or 사용하려면 모든 절을 인덱싱해야 $text 합니다.

  • 쿼리에 $text 표현식이 포함된 경우 hint()를 사용하여 쿼리에 사용할 인덱스를 지정할 수 없습니다.

  • 이 포함된 쿼리는 정렬을 $text $natural 사용할 수 없습니다.

  • 특수 텍스트 인덱스가 필요한 $text 표현식과 다른 유형의 특수 인덱스가 필요한 쿼리 연산자를 결합할 수 없습니다. 예를 들어 $text 표현식을 $near 연산자와 결합할 수 없습니다.

  • 보기$text을(를) 지원하지 않습니다.

  • Stable API V1 는 $text 인덱스 생성을 위한 를 지원 하지 않습니다.

$text 연산자를 집계에 사용하는 경우 다음 제한 사항도 적용됩니다.

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

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

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

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

필드$search MongoDB 텍스트 인덱스 쿼리 데 사용하는 단어를 지정합니다.

참고

$search 필드 MongoDB Atlas $ 검색 집계 단계와 다릅니다.$search 단계는 전체 텍스트 검색 제공하며 MongoDB Atlas 에서만 사용할 수 있습니다.

개별 용어 대신 여러 단어로 구성된 정확한 문자열을 일치시키려면 다음과 같이 문자열을 이스케이프된 큰따옴표(\")로 묶습니다.

"\"ssl certificate\""

$text 작업의 $search 문자열에 여러 단어로 된 문자열과 개별 용어가 포함된 경우 $text 는 여러 단어 문자열을 포함하는 문서와만 일치합니다.

예시 들어, 이 $search 문자열은 정확한 문자열 "ssl certificate"이 포함된 문서를 반환합니다.

"\"ssl certificate\" authority key"

단어를 부정하려면 단어 앞에 하이픈 빼기(-)를 붙입니다.

  • 부정 단어는 결과 설정하다 에서 부정 단어가 포함된 문서를 제외합니다.

  • 부정 단어만 있는 문자열은 문서와 일치하지 않습니다.

  • pre-market 과 같이 하이픈으로 연결된 단어는 부정이 아닙니다. MongoDB 하이픈을 구분 기호로 취급합니다. market을 부정하려면 pre -market를 사용합니다.

MongoDB 논리적 AND이 있는 연산에 모든 부정을 적용합니다.

MongoDB 영어에서 theand 와 같은 언어별 불용어를 무시합니다.

대소문자 및 분음 부호를 구분하지 않는 경우 은$text 전체 어간 단어와 일치합니다. 문서 필드 에 이 포함되어 blueberry 있으면 $searchblue 텀 일치하지 않습니다. 그러나blueberry 또는 blueberries 는 일치합니다.

대소문자 구분이 활성화된($caseSensitive: true) 상태에서 접미사 어간에 대문자가 포함되어 있으면 $text 이(가) 정확한 단어와 일치합니다.

분음 부호 민감도를$diacriticSensitive: true 활성화()한 상태에서 접미사 어간에 분음 부호 표시가 포함되어 있으면$text 가 정확한 단어와 일치합니다.

$text 기본값은 텍스트 인덱스 의 대소문자를 구분하지 않습니다.

  • 버전 3 텍스트 인덱스 는 분음 부호가 있거나 없는 라틴 문자 및 키릴 문자와 같은 라틴 문자가 아닌 문자의 대소문자를 구분하지 않습니다.

  • 이전 버전에서는 분음 부호가 없는 라틴 문자([A-z])의 대소문자를 구분하지 않습니다.

텍스트 인덱스 대소문자를 구분하지 않는 경우 대소문자 구분을 활성화 하려면 $caseSensitive: true 를 지정합니다.

$caseSensitive: true 이고 텍스트 인덱스 대소문자를 구분하지 않는 경우 $text은 다음과 같습니다.

  • 대소문자를 구분하지 않는 일치 항목과 발음 부호를 구분하지 않는 일치 항목에 대한 텍스트 인덱스 쿼리합니다.

  • 지정된 대소문자와 일치하는 문서만 반환하도록 결과를 필터링합니다.

$caseSensitive: true 및 접미사 어간에 대문자가 포함된 경우 $text 는 정확한 단어와 일치합니다.

$caseSensitive: true 를 활성화하면 성능이 저하될 수 있습니다.

$text 기본값은 텍스트 인덱스 의 분음 부호를 무시합니다.

  • 버전 3 텍스트 인덱스 는 분음 부호를 구분하지 않습니다. 인덱스 분음 부호가 있는 문자와 표시되지 않은é 문자(,,)를 구분하지ê e않습니다.

  • 이전 버전은 발음 부호를 구분합니다.

버전 3 텍스트 인덱스에서 발음 부호 구분을 활성화 하려면 $diacriticSensitive: true 를 지정합니다.

이전 텍스트 인덱스 버전은 항상 분음 부호를 구분하므로 $diacriticSensitive 은 아무런 효과가 없습니다.

버전 3 텍스트 인덱스 및 $diacriticSensitive: true 사용 시, $text:

  • 분음 부호를 구분하지 않는 텍스트 인덱스 쿼리합니다.

  • 결과를 필터링하여 지정된 용어의 발음 부호와 일치하는 문서만 반환합니다.

$diacriticSensitive: true 를 활성화하면 성능이 저하될 수 있습니다.

이전 텍스트 인덱스 버전에서는 $diacriticSensitive: true 가 이미 발음 구별 부호를 구분하는 텍스트 인덱스 쿼리합니다.

$diacriticSensitive: true 및 접미사 어간에 분음 부호가 포함된 경우 $text 는 정확한 단어와 일치합니다.

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

다음 예제에서는 에 articles 버전 3 텍스트 인덱스 가 있는 컬렉션 subject 사용합니다.

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

다음 문서로 컬렉션을 채웁니다.

db.articles.insertMany( [
{ _id: 1, subject: "coffee", author: "xyz", views: 50 },
{ _id: 2, subject: "Coffee Shopping", author: "efg", views: 5 },
{ _id: 3, subject: "Baking a cake", author: "abc", views: 90 },
{ _id: 4, subject: "baking", author: "xyz", views: 100 },
{ _id: 5, subject: "Café Con Leche", author: "abc", views: 200 },
{ _id: 6, subject: "Сырники", author: "jkl", views: 80 },
{ _id: 7, subject: "coffee and cream", author: "efg", views: 10 },
{ _id: 8, subject: "Cafe con Leche", author: "xyz", views: 10 }
] )

이 예시 $search 문자열에 coffee 를 지정합니다.

db.articles.find( { $text: { $search: "coffee" } } )

이렇게 하면 인덱싱된 subject 필드 에 coffee 의 어간 버전이 포함된 문서가 반환됩니다.

{ _id: 1, subject: 'coffee', author: 'xyz', views: 50 },
{ _id: 7, subject: 'coffee and cream', author: 'efg', views: 10 },
{ _id: 2, subject: 'Coffee Shopping', author: 'efg', views: 5 }

공백으로 구분된 $search 문자열은 각 텀 에 대해 논리적 OR 를 수행합니다. MongoDB 용어가 포함된 문서를 반환합니다.

이 예시 공백으로 구분된 세 개의 용어를 지정합니다.

db.articles.find( { $text: { $search: "bake coffee cake" } } )

이렇게 하면 인덱싱된 필드 에 bake 또는 또는 의 어간 버전이 포함된 문서가 coffee cake subject 반환됩니다.

{ "_id" : 2, "subject" : "Coffee Shopping", "author" : "efg", "views" : 5 }
{ "_id" : 7, "subject" : "coffee and cream", "author" : "efg", "views" : 10 }
{ "_id" : 1, "subject" : "coffee", "author" : "xyz", "views" : 50 }
{ "_id" : 3, "subject" : "Baking a cake", "author" : "abc", "views" : 90 }
{ "_id" : 4, "subject" : "baking", "author" : "xyz", "views" : 100 }

여러 단어로 구성된 정확한 문자열과 일치하도록 따옴표를 이스케이프 처리합니다.

이 예시 정확한 문자열 coffee shop과 일치합니다.

db.articles.find( { $text: { $search: "\"coffee shop\"" } } )

이 작업은 coffee shop 문자열이 포함된 문서를 반환합니다.

{ "_id" : 2, "subject" : "Coffee Shopping", "author" : "efg", "views" : 5 }

이 예시 두 개의 정확한 문자열에 대해 논리적 OR을 수행합니다.

db.articles.find( { $text: { $search: "\'coffee shop\' \'Cafe con Leche\'" } } )

이렇게 하면 두 문자열의 용어가 포함된 문서를 포함하여 두 문자열 중 하나를 포함하는 문서가 반환됩니다.

[
{ _id: 8, subject: 'Cafe con Leche', author: 'xyz', views: 10 },
{ _id: 5, subject: 'Café Con Leche', author: 'abc', views: 200 },
{ _id: 1, subject: 'coffee', author: 'xyz', views: 50 },
{ _id: 7, subject: 'coffee and cream', author: 'efg', views: 10 },
{ _id: 2, subject: 'Coffee Shopping', author: 'efg', views: 5 }
]

해당 텀 포함된 문서를 제외하려면 텀 앞에 - 을 붙입니다.

이 예시 coffee 를 포함하지만 shop 는 포함하지 않는 문서(어간 버전)와 일치합니다.

db.articles.find( { $text: { $search: "coffee -shop" } } )

이 작업은 다음 문서를 반환합니다.

{ "_id" : 7, "subject" : "coffee and cream", "author" : "efg", "views" : 10 }
{ "_id" : 1, "subject" : "coffee", "author" : "xyz", "views" : 50 }

$language 를 사용하여 $search 문자열에 대한 중지 단어, 형태소 분석기 및 토크나이저 규칙을 결정하는 언어 지정합니다.

default_language 값을 none으로 지정하면 텍스트 인덱스는 중단어(stop word)를 포함하여 필드에 있는 각 단어를 구문 분석하고 접미사 어간(stemming)은 무시합니다.

이 예시 es (스페인어)를 언어 로 지정합니다.

db.articles.find(
{ $text: { $search: "leche", $language: "es" } }
)

이번 예시에서는 다음 문서를 반환합니다.

{ "_id" : 5, "subject" : "Café Con Leche", "author" : "abc", "views" : 200 }
{ "_id" : 8, "subject" : "Cafe con Leche", "author" : "xyz", "views" : 10 }

와 같이 이름으로 언어를 지정할 수도 spanish 있습니다. 지원되는 언어는 자체 관리 배포서버의 텍스트 검색 언어를 참조하세요.

$text 기본값은 텍스트 인덱스 의 대소문자와 분음 부호를 구분하지 않습니다. 버전 3 텍스트 인덱스는 분음 부호가 있는 라틴 문자 및 키릴 문자와 같은 라틴 문자가 아닌 문자에 대해 분음 부호를 구분하지 않고 대소문자를 구분하지 않습니다. 대소문자 구분 없이 인덱스 인덱스 및 발음 구별 부호 무시하기 텍스트를 참조하세요.

이 예시 대소문자 및 분음 부호를 구분하지 않는 쿼리 수행합니다.

db.articles.find( { $text: { $search: "сы́рники CAFÉS" } } )

버전 3 텍스트 인덱스를 사용하면 다음과 일치합니다.

{ "_id" : 6, "subject" : "Сырники", "author" : "jkl", "views" : 80 }
{ "_id" : 5, "subject" : "Café Con Leche", "author" : "abc", "views" : 200 }
{ "_id" : 8, "subject" : "Cafe con Leche", "author" : "xyz", "views" : 10 }

이전 텍스트 인덱스 버전은 어떤 문서와도 일치하지 않습니다.

$caseSensitive: true로 대소문자 구분을 활성화합니다. 이로 인해 성능이 저하될 수 있습니다.

이 예시 Coffee에 대해 대소문자를 구분하는 쿼리 수행합니다.

db.articles.find( { $text: { $search: "Coffee", $caseSensitive: true } } )

이는 다음과만 일치합니다.

{ "_id" : 2, "subject" : "Coffee Shopping", "author" : "efg", "views" : 5 }

이 예시 정확한 여러 단어로 구성된 문자열에 대해 대소문자를 구분하는 쿼리 수행합니다.

db.articles.find( {
$text: { $search: "\"Café Con Leche\"", $caseSensitive: true }
} )

이는 다음과만 일치합니다.

{ "_id" : 5, "subject" : "Café Con Leche", "author" : "abc", "views" : 200 }

부정 용어(용어 - 접두사)에는 사용 사례 수 있습니다.

이 예시 Coffee 는 포함하지만 shop 은 포함하지 않는 문서(어간 버전)에 대해 대소문자를 구분하는 쿼리 수행합니다.

db.articles.find( { $text: { $search: "Coffee -shop", $caseSensitive: true } } )

이는 다음과 일치합니다:

{ "_id" : 2, "subject" : "Coffee Shopping", "author" : "efg" }

을 사용하여 버전 텍스트 인덱스에서 발음 부호 구분을 3 $diacriticSensitive: true 활성화합니다. 이로 인해 성능이 저하될 수 있습니다.

이 예시 CAFÉ (어간 버전)에 대해 발음 부호 구분 쿼리 수행합니다.

db.articles.find( { $text: { $search: "CAFÉ", $diacriticSensitive: true } } )

이는 다음과만 일치합니다.

{ "_id" : 5, "subject" : "Café Con Leche", "author" : "abc" }

부정 용어(용어에 - 접두사가 붙음)에는 분음 부호 구분을 사용할 수 있습니다.

이 예시 leches 는 포함하지만 cafés 는 포함하지 않는 문서(어간 버전)에 대해 발음 부호 구분 쿼리 수행합니다.

db.articles.find(
{ $text: { $search: "leches -cafés", $diacriticSensitive: true } }
)

이는 다음과 일치합니다:

{ "_id" : 8, "subject" : "Cafe con Leche", "author" : "xyz" }

이 예시 에서는 cake 를 쿼리하고 $meta 을 사용하여 일치하는 각 문서 에 관련성 점수를 추가합니다.

db.articles.find(
{ $text: { $search: "cake" } },
{ score: { $meta: "textScore" } }
)

반환된 문서 관련성 점수가 포함된 score 필드 포함되어 있습니다.

{ "_id" : 3, "subject" : "Baking a cake", "author" : "abc", "views" : 90, "score" : 0.75 }
  • 프로젝션에서 표현식을 지정하지 않고도 sort()에서 { $meta: "textScore" } 표현식을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

    db.articles.find(
    { $text: { $search: "cake" } }
    ).sort( { score: { $meta: "textScore" } } )

    따라서 textScore를 투영하지 않고도 관련성을 기준으로 결과 문서를 정렬할 수 있습니다.

  • { $meta: "textScore" } 표현식을 프로젝션sort()에 모두 포함하면 프로젝션 및 정렬 문서에서 표현식에 대해 서로 다른 필드 이름을 가질 수 있습니다.

    For example, in the following operation, the projection uses a field named score for the expression and the sort() uses the field named ignoredName.
    db.articles.find(
    { $text: { $search: "cake" } } ,
    { score: { $meta: "textScore" } }
    ).sort( { ignoredName: { $meta: "textScore" } } )

limit() 를 와 sort() 함께 사용하면 일치하는 상위 문서를 반환할 수 있습니다.

이 예시 에서는 coffee를 쿼리하고, 점수를 내림차순으로 정렬하며, 결과를 상위 두 문서로 제한합니다.

db.articles.find(
{ $text: { $search: "coffee" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } ).limit(2)

이 예시 author"xyz" 이고 subjectcoffee 또는 bake가 포함된 문서와 일치합니다. date 오름차순으로 정렬한 다음 관련성 점수를 내림차순으로 정렬합니다.

db.articles.find(
{ author: "xyz", $text: { $search: "coffee bake" } },
{ score: { $meta: "textScore" } }
).sort( { date: 1, score: { $meta: "textScore" } } )

돌아가기

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

이 페이지의 내용