자체 관리형 배포의 텍스트 인덱스
이 페이지의 내용
참고
이 페이지에서는 자체 관리(비Atlas) 배포를 위한 텍스트 쿼리 기능에 대해 설명합니다. MongoDB Atlas 에서 호스팅되는 데이터의 경우, MongoDB 는 향상된 전체 텍스트 쿼리 솔루션인Atlas Search 와 벡터 검색 솔루션인Atlas Vector Search 를 제공합니다.
개요
자체 관리형 배포서버에서 텍스트 Atlas Search 쿼리를 실행하려면 컬렉션에 텍스트 인덱스 가 있어야 합니다. MongoDB 는 string 콘텐츠에 대한 텍스트 Atlas Search 쿼리를 지원하기 위해 텍스트 인덱스를 제공합니다. 텍스트 인덱스에는 값이 string 또는 string 요소의 배열인 모든 필드가 포함될 수 있습니다. 컬렉션에는 텍스트 Atlas Search 인덱스가 하나만 있을 수 있지만 해당 인덱스는 여러 필드를 포함할 수 있습니다.
호환성
MongoDB Atlas에서 호스팅되는 배포에 텍스트 인덱스를 사용할 수 있습니다.
MongoDB Atlas에서 호스팅되는 배포의 인덱스 관리에 대해 자세히 알아보려면 인덱스 생성, 보기, 삭제 및 숨기기를 참조하세요.
버전
텍스트 인덱스는 세 가지 버전으로 사용할 수 있습니다. 기본적으로 MongoDB는 새로운 텍스트 인덱스가 포함된 버전 3을 사용합니다.
기본값을 재정의하고 이전 버전을 사용하려면 인덱스를 만들 때 textIndexVersion
옵션을 사용합니다.
텍스트 인덱스 만들기
중요
collection에는 최대 하나 의 text
인덱스가 있을 수 있습니다.
Atlas Search(MongoDB Atlas에서 사용 가능)는 단일 컬렉션에서 여러 개의 전체 텍스트 검색 인덱스를 지원합니다. 자세히 알아보려면 Atlas Search 문서를 참조하세요.
text
인덱스 를 만들려면 db.collection.createIndex()
메서드를 사용합니다. string 또는 string 요소의 배열 이 포함된 필드 를 인덱스 하려면 다음 예시 와 같이 인덱스 문서 에 필드 를 포함하고 string 리터럴 "text"
를 지정합니다.
db.reviews.createIndex( { comments: "text" } )
text
인덱스에 대해 여러 필드를 인덱싱할 수 있습니다. 다음 예에서는 subject
및 comments
필드에 text
인덱스를 생성합니다.
db.reviews.createIndex( { subject: "text", comments: "text" } )
복합 인덱스 에는 text
인덱스 키를 오름차순/내림차순 인덱스 키와 함께 포함할 수 있습니다. 자세한 내용은 복합 인덱스를 참조하세요.
text
인덱스를 삭제하려면 인덱스 이름을 사용합니다. 자세한 내용 은 인덱스 이름을 사용하여 text
인덱스 삭제 를 참조하세요.
가중치 지정
text
인덱스의 경우 인덱스된 필드의 가중치 는 텍스트 검색 점수 측면에서 인덱스된 다른 필드에 대한 필드의 중요성을 나타냅니다.
문서의 인덱싱된 각 필드에 대해 MongoDB는 일치 항목 수에 가중치를 곱하고 결과를 합산합니다. 그런 다음 MongoDB는 이 합계를 사용하여 문서의 점수를 계산합니다. 텍스트 점수별 반환 및 정렬에 대한 자세한 내용은 $meta
연산자를 참조하세요.
인덱싱된 필드의 기본 가중치는 1입니다. 인덱싱된 필드의 가중치를 조정하려면 db.collection.createIndex()
메서드에 weights
옵션을 포함합니다.
가중치를 사용하여 텍스트 검색 결과를 제어하는 에 대한 자세한 내용 은 자체 관리 배포서버에서 텍스트 검색 결과에 가중치 할당을 참조하세요.
와일드카드 텍스트 인덱스
참고
여러 필드에 text
인덱스를 만들 때 와일드카드 지정자($**
)를 사용할 수도 있습니다. 와일드카드 텍스트 인덱스를 사용하면 MongoDB는 collection의 각 문서에 대한 문자열 데이터가 포함된 모든 필드를 인덱싱합니다. 다음 예에서는 와일드카드 지정자를 사용하여 텍스트 인덱스를 만듭니다.
db.collection.createIndex( { "$**": "text" } )
이 인덱스를 사용하면 문자열 콘텐츠가 있는 모든 필드에서 텍스트 검색을 수행할 수 있습니다. 이러한 인덱스는 고도로 구조화되지 않은 데이터 또는 임시 쿼리에 어떤 필드를 텍스트 인덱스에 포함할지 확실하지 않은 경우 유용할 수 있습니다.
와일드카드 텍스트 인덱스는 여러 필드에 대한 text
인덱스입니다. 따라서 인덱스 생성 중에 특정 필드에 가중치를 할당하여 결과 순위를 제어할 수 있습니다. 가중치를 사용하여 텍스트 검색 결과를 제어하는 에 대한 자세한 내용 은 자체 관리 배포서버에서 텍스트 검색 결과에 가중치 할당을 참조하세요.
와일드카드 텍스트 인덱스는 모든 텍스트 인덱스와 마찬가지로 복합 인덱스의 일부가 될 수 있습니다. 예를 들어 다음은 와일드카드 지정자뿐만 아니라 a
필드에 복합 인덱스를 생성합니다.
db.collection.createIndex( { a: 1, "$**": "text" } )
모든 복합 텍스트 인덱스 와 마찬가지로 a
가 텍스트 인덱스 키 앞에 오기 때문에 이 인덱스를 사용하여 $text
Atlas Search를 수행하려면 쿼리 조건자에 동등성 매치 조건 a
이(가) 포함되어야 합니다. 복합 텍스트 인덱스에 대한 자세한 내용은 복합 텍스트 인덱스를 참조하세요 .
대소문자 구분 안 함
버전 인덱스는 3 text
일반적인 C
, 단순 을 S
지원하며, 터키어의 경우 T
유니코드 문자 8.0 데이터베이스 대소문자 접기 에 지정된 특수 대소문자 접기를 지원합니다. .
대소문자 접기는 é
및 É
와 같이 분음 부호가 있는 문자와 키릴 문자의 ' ' ' 및 ' ' 와 같이 라틴 알파벳이 아닌 문자의 문자를 포함하도록 text
인덱스의 대소문자 구분을 확장합니다. .
text
인덱스의 버전 3 도 발음 구별 부호 를 구분하지 않습니다. 따라서 인덱스도 é
, É
, e
및 E
을(를) 구분하지 않습니다.
이전 버전의 text
인덱스는 [A-z]
에 대해서만 대소문자를 구분하지 않습니다. 즉, 발음 구별 부호가 아닌 라틴 문자의 경우 대소문자를 구분하지 않습니다. 다른 모든 문자의 경우, 이전 버전의 텍스트 인덱스에서는 별개의 문자로 취급합니다.
발음 구별 기호 무시
버전 3 에서 text
인덱스는 발음 구별 부호를 구분하지 않습니다. 즉, 인덱스는 분음 부호를 포함하는 문자와 표시되지 않은 문자(예: é
, ê
및 e
)를 구분하지 않습니다. 보다 구체적으로, 인덱스는 유니코드 에서 text
발음 부호로 분류된 문자를 8제거합니다.0 캐릭터 데이터베이스 프롭 목록.
text
인덱스의 버전 3 도 분음 부호가 있는 문자에 대해 대소문자 를 구분하지 않습니다. 따라서 인덱스도 é
, É
, e
및 E
을(를) 구분하지 않습니다.
이전 버전의 text
인덱스에서는 분음 부호가 있는 문자를 고유한 문자로 취급합니다.
토큰화 구분자
토큰화의 3 text
경우 버전 인덱스는 유니코드 에서 Dash
Hyphen
, , Pattern_Syntax
, Quotation_Mark
, Terminal_Punctuation
및 로 분류된 구분자를 White_Space
8사용합니다.0 문자 데이터베이스 프롭 목록.
예를 들어 문자열 "Il a dit qu'il «était le meilleur
joueur du monde»"
이 주어지면 text
인덱스는 «
, »
및 공백을 구분 기호로 취급합니다.
이전 버전의 인덱스에서는 «
를 "«était"
용어의 일부로, »
를 "monde»"
용어의 일부로 처리했습니다.
인덱스 항목
text
인덱스는 인덱스 항목에 대해 인덱스된 필드의 용어를 토큰화하고 어간 처리합니다. text
인덱스는 컬렉션의 각 문서에 대해 인덱스된 각 필드에 있는 고유한 어간 용어 각각에 대해 하나의 인덱스 항목을 저장합니다. 이 인덱스는 간단한 언어별 접미사 형태소 분석을 사용합니다.
지원되는 언어 및 중지 단어
MongoDB 는 다양한 언어에 대한 텍스트 검색 을 지원합니다. text
인덱스는 언어별 불용어(예: 영어에서 the
, an
, a
, and
등)를 삭제하고 간단한 언어별 접미사 어간 처리를 사용합니다. 지원되는 언어 목록은 자체 관리 배포서버의 텍스트 검색 언어를 참조하세요.
default_language
값을 none
으로 지정하면 텍스트 인덱스는 중단어(stop word)를 포함하여 필드에 있는 각 단어를 구문 분석하고 접미사 어간(stemming)은 무시합니다.
text
인덱스 의 언어 를 지정하려면 자체 관리 배포서버에서 텍스트 인덱스의 기본 언어 지정을 참조하세요.
sparse
속성
text
인덱스는 항상 sparse 하며 sparse 옵션을 무시합니다. 문서에 text
인덱스 필드가 없는 경우(또는 필드가 null
또는 빈 배열인 경우) MongoDB는 문서에 대한 항목을 text
인덱스에 추가하지 않습니다. 삽입의 경우 MongoDB는 문서를 삽입하지만 text
인덱스에 추가하지는 않습니다.
다른 유형의 키와 함께 text
인덱스 키를 포함하는 복합 인덱스의 경우, text
인덱스 필드만이 인덱스가 문서를 참조하는지 여부를 결정합니다. 다른 키는 인덱스가 문서를 참고 여부를 결정하지 않습니다.
제한 사항
컬렉션당 텍스트 인덱스 1개
collection에는 최대 하나 의 text
인덱스가 있을 수 있습니다.
Atlas Search(MongoDB Atlas에서 사용 가능)는 단일 컬렉션에서 여러 개의 전체 텍스트 검색 인덱스를 지원합니다. 자세히 알아보려면 Atlas Search 문서를 참조하세요.
텍스트 검색 및 힌트
쿼리에 $text
표현식이 포함된 경우 hint()
를 사용하여 쿼리에 사용할 인덱스를 지정할 수 없습니다.
텍스트 검색 및 구문
$text
연산의 $search
문자열에 구와 개별 용어가 포함된 경우 $text
는 해당 구가 포함된 문서에만 일치합니다.
$text
연산자를 여러 문구와 함께 사용할 수 없습니다.
텍스트 인덱스 및 정렬
정렬 작업은 복합 텍스트 인덱스 에서도 text
인덱스에서는 정렬 순서를 가져올 수 없습니다. 즉, 정렬 작업은 텍스트 인덱스의 순서를 사용할 수 없습니다.
복합 인덱스
복합 인덱스 에는 오름차순/내림차순 인덱스 키와 함께 text
인덱스 키가 포함될 수 있습니다. 그러나 이러한 복합 인덱스에는 다음과 같은 제한 사항이 있습니다.
복합
text
인덱스에는 다중 키 또는 지리 공간적 인덱스 필드와 같은 다른 특수 인덱스 유형이 포함될 수 없습니다.복합 텍스트 인덱스 에 텍스트 인덱스 키 앞에 오는 키가 포함되어 있는 경우
$text
를 사용하려면 쿼리 조건자에 앞의 키에 대한 동등성 매치 조건 이 포함되어야 합니다.복합
text
인덱스를 만들 때 모든text
인덱스 키는 인덱스 사양 문서에 인접해 나열되어야 합니다.
추가 제한 사항은 텍스트 인덱스 및 정렬 을 참조하세요.
복합 텍스트 인덱스 의 예시 는 자체 관리 배포서버에서 스캔되는 텍스트 인덱스 항목의 수 제한을 참조하세요.
텍스트 인덱스 삭제
text
인덱스를 삭제하려면 인덱스 이름 을 db.collection.dropIndex()
메서드에 전달합니다. 인덱스 이름을 가져오려면 db.collection.getIndexes()
메서드를 실행합니다.
text
인덱스의 기본 명명 체계 및 기본 이름 재정의에 대한 자세한 내용 은 text
인덱스 이름 지정을 참조하세요.
데이터 정렬 옵션
text
인덱스는 단순 이진 비교만 지원하며 데이터 정렬은 지원하지 않습니다.
단순 데이터 정렬이 아닌 collection에서 text
인덱스를 만들려면 인덱스를 만들 때 {collation: {locale: "simple"}
}
을 명시적으로 지정해야 합니다.
스토리지 요구 사항 및 성능 비용
text
인덱스의 스토리지 요구 사항과 성능 비용은 다음과 같습니다.
text
인덱스는 클 수 있습니다. 여기에는 삽입된 각 문서의 각 인덱스 필드에 있는 고유한 어간 단어 각각에 대해 하나의 인덱스 항목이 포함됩니다.text
인덱스를 빌드하는 것은 대규모 다중 키 인덱스를 빌드하는 것과 매우 유사하며 동일한 데이터에 대해 간단한 정렬(스칼라) 인덱스를 빌드하는 것보다 시간이 오래 걸립니다.기존 collection에 대규모
text
인덱스를 빌드할 때는 열린 파일 디스크립터에 대한 제한이 충분히 높은지 확인하세요. 권장 설정을 참조하세요.text
MongoDB는 각 새 소스 문서의 각 인덱스 필드에 각각의 고유한 어간 단어에 대한 인덱스 항목을 추가해야 하기 때문에 인덱스가 삽입 처리량에 영향을 미칩니다.또한
text
인덱스는 구나 문서 내 단어의 근접성에 대한 정보를 저장하지 않습니다. 결과적으로 전체 collection이 RAM에 맞을 때 구문 쿼리가 훨씬 더 효과적으로 실행됩니다.
텍스트 검색 지원
text
인덱스 는 $text
쿼리 작업을 지원합니다. 텍스트 검색 의 예는 $text reference page
를 참조하세요. 집계 파이프라인의 $text
작업 예시는 자체 관리 배포서버의 집계 파이프라인에서 $text를 참조하세요.