MongoDB - 텍스트 필드의 인덱스와 텍스트 인덱스의 차이?
문자열(예: 주 또는 지방 이름)이 포함된 MongoDB 필드의 경우 문자열 유형 필드에 인덱스를 만드는 것과 어떤 차이가 있습니까?
db.ensureIndex( { field: 1 } )
해당 필드에 텍스트 색인을 작성합니다.
db.ensureIndex( { field: "text" }
두 경우 모두,field
의 것입니다.string
유형.
단어 하나를 포함하는 텍스트 필드에서 대소문자를 구분하지 않는 검색을 수행하는 방법을 찾고 있습니다(아마도 더 많을 것입니다).Mongo가 처음이라 위의 두 인덱스 방법을 사용하는 것과 심지어 비슷한 방법을 사용하는 것을 구별하는 데 어려움을 겪고 있습니다.$regex
서치.
두 인덱스 옵션은 매우 다릅니다.
문자열 필드에 일반 인덱스를 만들면 문자열의 전체 값이 인덱싱됩니다.대부분 정확하게 일치시킬 수 있는 단일 단어 문자열(로그인용 사용자 이름 등)에 유용합니다.
반면에 텍스트 색인은 필드의 내용을 토큰화하고 차단합니다.따라서 문자열을 개별 단어나 토큰으로 나누고, 동일한 단어의 변형이 일치하도록 줄기로 줄입니다(예: "talk"가 세 가지 모두의 줄기이기 때문에 "talks", "talked" 및 "talking"과 일치함).대부분 실제 텍스트(문장, 단락 등)에 유용합니다.
텍스트 검색
텍스트 검색은 컬렉션의 문서에서 문자열 내용 검색을 지원합니다.MongoDB는 다음을 제공합니다.
$text
쿼리 및 집계 파이프라인에서 텍스트 검색을 수행하는 연산자입니다.텍스트 검색 프로세스:
tokenizes and stems the search term(s) during both the index creation and the text command execution. assigns a score to each document that contains the search term in the indexed fields. The score determines the relevance of a document to a given search query.
그
$text
연산자는 단어와 구를 검색할 수 있습니다.쿼리가 전체 스템 단어와 일치합니다.예를 들어, 문서 필드에 blueberry라는 단어가 포함된 경우 파란색이라는 용어의 검색은 문서와 일치하지 않습니다.그러나 블루베리 또는 블루베리에 대한 검색이 일치합니다.$regex
검색을 문자열 필드의 일반 인덱스와 함께 사용하여 일부 패턴 일치 및 와일드카드 검색을 제공할 수 있습니다.인덱스의 효율적인 사용자는 아니지만 다음과 같은 작업을 수행할 수 있는 인덱스를 사용합니다.필드에 인덱스가 있는 경우 MongoDB는 정규식을 인덱스의 값과 일치시키므로 수집 검사보다 빠를 수 있습니다.정규식이 "접두사 표현식"인 경우 추가 최적화가 발생할 수 있습니다. 즉, 모든 잠재적 일치 항목이 동일한 문자열로 시작됩니다.이를 통해 MongoDB는 해당 접두사에서 "범위"를 구성하고 해당 범위에 속하는 인덱스의 값과만 일치시킬 수 있습니다.
http://docs.mongodb.org/manual/core/index-text/
http://docs.mongodb.org/manual/reference/operator/query/regex/
텍스트 색인을 사용하여 텍스트 내부의 단어를 검색할 수 있습니다.텍스트 색인화되지 않은 텍스트 필드에서 정규식을 사용하여 동일한 작업을 수행할 수 있지만 속도가 훨씬 느립니다.
MongoDB 2.6 이전에는 텍스트 검색 작업을 자체 명령으로 수행해야 했는데, 다른 필터와 결합할 수 없고 결과를 공통 커서로 처리할 수 없어 큰 단점이 있었습니다.현재 텍스트 검색은 일반적인 작업에 대한 또 다른 연산자일 뿐입니다.find
방법과 그것은 매우 좋습니다.
그렇다면 텍스트 색인과 그 이후의 검색이 색인되지 않은 텍스트 필드의 정규식보다 빠른 이유는 무엇입니까?텍스트 색인이 언어별로 단어를 삭제할 수 있는 똑똑한 사전 역할을 하기 때문입니다(기본값은 영어).텍스트 검색 쿼리를 실행할 때 사전을 기준으로 실행하여 전체 컬렉션에 대해 반복하는 데 소요되는 시간을 절약할 수 있습니다.
텍스트 색인은 컬렉션과 함께 증가하며 많은 공간을 사용할 수 있습니다.저는 캡션 컬렉션을 사용할 때 이것을 어렵게 배웠습니다.텍스트 인덱스를 캡할 수 없습니다.
텍스트 필드의 일반 색인(예:
db.ensureIndex( { field: 1 } )
전체 텍스트를 검색하는 경우에만 유용합니다.예를 들어 영숫자 해시를 찾는 데 사용됩니다.텍스트 단락, 구문 등을 저장할 때 이러한 종류의 인덱스를 적용하는 것은 의미가 없습니다.
언급URL : https://stackoverflow.com/questions/24316117/mongodb-difference-between-index-on-text-field-and-text-index
'programing' 카테고리의 다른 글
전자: jQuery가 정의되지 않았습니다. (0) | 2023.07.02 |
---|---|
git-diff의 출력에서 공백 색상 지정 (0) | 2023.07.02 |
두 표의 데이터를 하나의 보기로 변환 (0) | 2023.07.02 |
스프링 부트에서 application.properties에서 application.yml로 변환하는 방법은 무엇입니까? (0) | 2023.07.02 |
단일 값 이벤트에 대한 Firebase 오프라인 기능 및 청취자 추가 (0) | 2023.07.02 |