사용자 지정 분석기의 토크나이저 MongoDB Search가 인덱싱 위해 텍스트를 개별 청크로 분할하는 방법을 결정합니다. 토크나이저에는 유형 필드 필요하며, 일부 토크나이저는 추가 옵션도 필요로 합니다.
"tokenizer": { "type": "<tokenizer-type>", "<additional-option>": "<value>" }
토크나이저 유형
MongoDB Search는 다음 유형의 토크나이저 지원합니다.
다음 샘플 인덱스 정의 및 쿼리는 라는 샘플 컬렉션 minutes
사용합니다. 이러한 예제를 따라 하려면 클러스터에 minutes
컬렉션 로드하고 MongoDB 검색 인덱스 만들기 튜토리얼의 단계에 따라 Atlas UI의 Create a Search Index 페이지로 이동합니다. 그런 다음 minutes
컬렉션 데이터 소스로 선택하고 예시 절차에 따라 Atlas UI에서 또는 mongosh
를 사용하여 인덱스 생성합니다.
Select your language 드롭다운 메뉴를 사용하여 이 페이지에서 예시의 언어를 설정합니다.
edgeGram
edgeGram
토크나이저는 텍스트 입력의 왼쪽 또는 "엣지"에서 지정된 크기의 n-그램으로 입력을 토큰화합니다. 동의어 또는 자동 완성 필드 매핑 정의를 위한 analyzer
필드에서는 edgeGram 토크나이저와 함께 사용자 지정 분석기를 사용할 수 없습니다.
속성
다음과 같은 속성이 있습니다.
참고
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | 네 | 생성된 가장 짧은 토큰에 포함할 문자 수입니다. |
| integer | 네 | 생성된 가장 긴 토큰에 포함할 문자 수입니다. |
예시
다음 인덱스 정의는 edgegramExample
이라는 사용자 지정 분석기를 사용하여 minutes
컬렉션의 message
필드를 인덱싱합니다. edgeGram
토크나이저를 사용하여 message
필드의 단어 왼쪽에 있는 첫 번째 문자로부터 문자 2
~ 7
사이에서 토큰(검색 가능한 텀)을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
edgegramExample
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운에서 edgeGram을 선택하고 다음 필드에 값을 입력합니다.
필드값minGram
2
maxGram
7
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
edgegramExample
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "edgegramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "edgegramExample", "tokenFilters": [], "tokenizer": { "maxGram": 7, "minGram": 2, "type": "edgeGram" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "edgegramExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "edgegramExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "maxGram": 7, 20 "minGram": 2, 21 "type": "edgeGram" 22 } 23 } 24 ] 25 } 26 )
다음 쿼리는 minutes
collection의 message
필드에서 tr
로 시작하는 텍스트를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "text": { "query": "tr", "path": "message" } } } SCORE: 0.3150668740272522 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département" SCORE: 0.3150668740272522 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "tr", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }
MongoDB Search는 검색 텀 _id: 1
_id: 3
일치하는 문서의 {MongoDB} 토크나이저 사용하여 값의 토큰을 생성했기 때문에 tr
edgeGram
결과에 및 이 포함된 문서를 반환합니다. standard
토크나이저 사용하여 message
필드 인덱스 경우 MongoDB Search는 검색 tr
텀 대한 결과를 반환하지 않습니다.
다음 표는 edgeGram
토크나이저와 이와는 대조적인 standard
토크나이저가 결과 내 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
keyword
keyword
토크나이저 전체 입력을 단일 토큰으로 토큰화합니다. MongoDB Search는 keyword
토크 토크나이저 사용하여 32766 자를 초과하는 문자열 필드를 인덱스 하지 않습니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 keywordExample
이라는 사용자 지정 분석기를 사용하여 minutes
컬렉션의 message
필드를 인덱싱합니다. keyword
토크나이저를 사용하여 전체 필드에 대한 토큰(검색 가능한 텀)을 단일 텀으로 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
keywordExample
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 keyword 을(를) 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
keywordExample
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "message": { 6 "analyzer": "keywordExample", 7 "type": "string" 8 } 9 } 10 }, 11 "analyzers": [ 12 { 13 "charFilters": [], 14 "name": "keywordExample", 15 "tokenFilters": [], 16 "tokenizer": { 17 "type": "keyword" 18 } 19 } 20 ] 21 }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "keywordExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "keywordExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "type": "keyword" 20 } 21 } 22 ] 23 } 24 )
다음 message
쿼리는 minutes
컬렉션의 필드에서 구문 try to sign-in
을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "text": { "query": "try to sign-in", "path": "message" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "try to sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 3, message: 'try to sign-in' }
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 try to sign-in
포함된 keyword
문서 를 반환합니다. standard
토크나이저 사용하여 message
필드 인덱스 경우, 각 문서 standard
일부 토큰이 포함되어 있기 때문에 MongoDB Search는 검색 try to sign-in
텀 대해 _id: 1
, _id: 2
, _id: 3
이 있는 문서를 반환합니다. 토크나이저 생성합니다.
다음 표는 keyword
토크나이저와 이와는 대조적인 standard
토크나이저가 _id: 3
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
nGram
nGram
토크나이저는 주어진 크기의 텍스트 청크 또는 'n-gram'으로 토큰화합니다. analyzer
필드에서 동의어 또는 자동 완성 필드 매핑 정의에 대해 사용자 지정 분석기를 nGram 토크나이저와 함께 사용할 수 없습니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | 네 | 생성된 가장 짧은 토큰에 포함할 문자 수입니다. |
| integer | 네 | 생성된 가장 긴 토큰에 포함할 문자 수입니다. |
예시
다음 인덱스 정의는 ngramExample
이라는 사용자 지정 분석기를 사용하여 minutes
collection의 title
필드를 인덱싱합니다. nGram
토크나이저를 사용하여 title
필드에서 4
자와 6
자 사이의 토큰(검색 가능한 용어)을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
ngramAnalyzer
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운에서 nGram을 선택하고 다음 필드에 값을 입력합니다.
필드값minGram
4
maxGram
6
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
ngramAnalyzer
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "title": { 6 "analyzer": "ngramExample", 7 "type": "string" 8 } 9 } 10 }, 11 "analyzers": [ 12 { 13 "charFilters": [], 14 "name": "ngramExample", 15 "tokenFilters": [], 16 "tokenizer": { 17 "maxGram": 6, 18 "minGram": 4, 19 "type": "nGram" 20 } 21 } 22 ] 23 }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "ngramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "ngramExample", "tokenFilters": [], "tokenizer": { "maxGram": 6, "minGram": 4, "type": "nGram" } } ] })
다음 title
쿼리는 minutes
컬렉션의 필드에서 용어 week
를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "week", "path": "title" } } } SCORE: 0.5895273089408875 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "week", 6 "path": "title" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "title": 1 14 } 15 } 16 ])
{ _id: 1, title: "The team's weekly meeting" }
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 1
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 week
포함된 nGram
문서 를 반환합니다. standard
또는 edgeGram
토크나이저 사용하여 title
필드 인덱스 경우 MongoDB Search는 검색 week
텀 대한 결과를 반환하지 않습니다.
다음 표는 nGram
토크나이저와 이와는 대조적인 standard
및 edgeGram
토크나이저가 _id: 1
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
|
|
regexCaptureGroup
regexCaptureGroup
토크나이저는 Java 정규 표현식 패턴을 일치시켜 토큰을 추출합니다.
팁
Java 정규 표현식 구문에 대해 자세히 학습하려면 Java 문서에서 패턴 클래스를 참조하세요.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 | 네 | 일치시킬 정규 표현식. |
| integer | 네 | 토큰으로 추출할 일치하는 표현식 내 문자 그룹의 인덱스입니다. 모든 문자 그룹을 추출하려면 |
예시
다음 인덱스 정의는 phoneNumberExtractor
라는 사용자 지정 분석기를 사용하여 minutes
collection의 page_updated_by.phone
필드를 인덱싱합니다. 다음을 사용합니다.
mappings
처음 세 자리 숫자의 괄호를 제거하고 모든 공백과 마침표를 대시로 바꾸는 문자 필터regexCaptureGroup
토크나이저를 사용하여 텍스트 입력에 있는 첫 번째 미국 형식의 전화번호에서 단일 토큰을 만듭니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
phoneNumberExtractor
을 입력합니다.Character Filters을 확장하고 Add character filter을 클릭합니다.
드롭다운에서 mapping을(를) 선택하고 을(를) 클릭하세요.
Original 필드에 다음 문자를 한 번에 하나씩 입력하고 해당 Replacement 필드는 비워 둡니다.
원본교체-
.
(
)
Add character filter를 클릭합니다.
접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운에서 regexCaptureGroup을 선택하고 다음 필드에 값을 입력합니다.
필드값pattern
^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$
group
0
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.phone 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 page_updated_by.phone을 선택하고 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
phoneNumberExtractor
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] })
다음 page_updated_by.phone
쿼리는 minutes
컬렉션의 필드에서 전화번호 123-456-9870
을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "123-456-9870", "path": "page_updated_by.phone" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "123-456-9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 123-456-7890
포함된 regexCaptureGroup
문서 를 반환합니다. standard
토크나이저 사용하여 page_updated_by.phone
필드 인덱스 하면 MongoDB Search는 검색 123-456-7890
텀 대한 모든 문서를 반환합니다.
다음 표는 regexCaptureGroup
토크나이저와 이와는 대조적인 standard
토크나이저가 _id: 3
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
regexSplit
regexSplit
토크나이저는 Java 정규 표현식 기반 구분 기호를 사용하여 토큰을 분할합니다.
팁
Java 정규 표현식 구문에 대해 자세히 알아보려면 Java 문서의 Pattern 클래스를 참조하세요.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 | 네 | 일치시킬 정규 표현식. |
예시
다음 인덱스 정의는 dashDotSpaceSplitter
이라는 사용자 지정 분석기를 사용하여 minutes
컬렉션의 page_updated_by.phone
필드를 인덱싱합니다. regexSplit
토크나이저를 사용하여 page_updated_by.phone
필드에 있는 하나 이상의 하이픈, 마침표 및 공백으로 토큰(검색 가능한 텀)을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
dashDotSpaceSplitter
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운에서 regexSplit을 선택하고 다음 필드에 값을 입력합니다.
필드값pattern
[-. ]+
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.phone 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 page_updated_by.phone을 선택하고 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
dashDotSpaceSplitter
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
{ "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] })
다음 page_updated_by.phone
쿼리는 minutes
컬렉션의 필드에서 숫자 9870
을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "9870", "path": "page_updated_by.phone" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 9870
포함된 regexSplit
문서 를 반환합니다. standard
토크나이저 사용하여 page_updated_by.phone
필드 인덱스 경우 MongoDB Search는 검색 9870
텀 대한 결과를 반환하지 않습니다.
다음 표는 regexCaptureGroup
토크나이저와 이와는 대조적인 standard
토크나이저가 _id: 3
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
표준
standard
토크나이저는 유니코드 텍스트 세분화 알고리즘의 단어 나누기 규칙에 따라 토큰화합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | no | 단일 토큰의 최대 길이입니다. 이 길이보다 큰 토큰은 기본값: |
예시
다음 인덱스 정의는 standardExample
(이)라는 사용자 지정 분석기를 사용하여 minutes
collection의 message
필드를 인덱싱합니다. standard
토크나이저 및 stopword 토큰 필터를 사용합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
standardExample
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
standardExample
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "standardExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "standardExample", "tokenFilters": [], "tokenizer": { "type": "standard" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "standardExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "standardExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "type": "standard" 20 } 21 } 22 ] 23 } 24 )
다음 message
쿼리는 minutes
컬렉션의 필드에서 용어 signature
를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "text": { "query": "signature", "path": "message" } } } SCORE: 0.5376965999603271 _id: "4" message: "write down your signature or phone №" page_updated_by: Object last_name: "LEVINSKI" first_name: "François" email: "levinski@example.com" phone: "123-456-8907" text: Object en_US: "<body>This page has been updated with the items on the agenda.</body>" es_MX: "La página ha sido actualizada con los puntos de la agenda." pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "signature", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 4, message: 'write down your signature or phone №' }
MongoDB Search는 검색 와 일치 텀 문서의 standard
토크나이저 사용하여 signature
값의 토큰을 생성했기 때문에 _id: 4
이 포함 MongoDB 문서 를 반환합니다. keyword
토크나이저 사용하여 message
필드 인덱스 경우 MongoDB Search는 검색 signature
텀 대한 결과를 반환하지 않습니다.
다음 표는 standard
토크나이저와 이와는 대조적인 keyword
분석기가 _id: 4
를 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
uaxUrlEmail
uaxUrlEmail
토크나이저 URL및 이메일 주소를 토큰화합니다. uaxUrlEmail
토크나이저 유니코드 텍스트 분할 알고리즘의 단어 나누기 규칙에 따라 토큰화하지만, 인덱싱된 필드 값에 URL및 이메일 주소가 포함된 경우에만 uaxUrlEmail
토크나이저 사용하는 것이 좋습니다. URL이나 이메일 주소가 포함되지 않은 필드의 경우 표준 토크나이저 사용하여 단어 나누기 규칙에 따라 토큰을 생성합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| int | no | 하나의 토큰에 포함될 수 있는 최대 문자 수입니다. 기본값: |
예시
다음 인덱스 정의는 minutes
컬렉션에서 basicEmailAddressAnalyzer
라는 사용자 지정 분석기를 사용하여 page_updated_by.email
필드를 인덱싱합니다. uaxUrlEmail
토크나이저를 사용하여 page_updated_by.email
필드에 있는 URL및 이메일 주소에서 토큰(검색 가능한 텀)을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
basicEmailAddressAnalyzer
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 uaxUrlEmail 을(를) 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 page_updated_by.email을 선택하고 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
basicEmailAddressAnalyzer
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
다음 쿼리는 minutes
컬렉션의 page_updated_by.email
필드에서 이메일 lewinsky@example.com
을(를) 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "text": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 lewinsky@example.com
포함된 uaxUrlEmail
문서 를 반환합니다. standard
토크나이저 사용하여 page_updated_by.email
필드 인덱스 하면 MongoDB Search는 검색 lewinsky@example.com
텀 대한 모든 문서를 반환합니다.
다음 표는 uaxUrlEmail
토크나이저와 이와는 대조적인 standard
토크나이저가 _id: 3
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|
다음 인덱스 정의는 emailAddressAnalyzer
라는 사용자 지정 분석기를 사용하여 minutes
collection의 page_updated_by.email
필드를 인덱싱합니다. 다음을 사용합니다.
edgeGram
토큰화 전략을 사용한 자동 완성 유형URL과 이메일 주소에서 토큰(검색 가능한 텀)을 생성하는
uaxUrlEmail
토크나이저
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
emailAddressAnalyzer
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 uaxUrlEmail 을(를) 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 page_updated_by.email을 선택하고 Data Type 드롭다운에서 자동 완성을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
emailAddressAnalyzer
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
다음 page_updated_by.email
쿼리는 minutes
컬렉션의 필드에서 용어 exam
를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "autocomplete": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 1.0203158855438232 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 lewinsky@example.com
포함된 uaxUrlEmail
문서 를 반환합니다. standard
토크나이저 사용하여 page_updated_by.email
필드 인덱스 하면 MongoDB Search는 검색 lewinsky@example.com
텀 대한 모든 문서를 반환합니다.
다음 표는 uaxUrlEmail
토크나이저와 이와는 대조적인 standard
토크나이저가 _id: 3
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | MongoDB 검색 필드 유형 | Token Outputs |
---|---|---|
|
|
|
|
|
|
whitespace
whitespace
토크나이저는 단어 사이의 공백 발생을 기반으로 토큰화합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
| 문자열 | 네 | 이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | no | 단일 토큰의 최대 길이입니다. 이 길이보다 큰 토큰은 기본값: |
예시
다음 인덱스 정의는 whitespaceExample
이라는 사용자 지정 분석기를 사용하여 minutes
collection의 message
필드를 인덱싱합니다. whitespace
토크나이저를 사용하여 message
필드의 모든 공백에서 토큰(검색 가능한 용어)을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
whitespaceExample
을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
whitespaceExample
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] })
다음 message
쿼리는 minutes
컬렉션의 필드에서 용어 SIGN-IN
를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.
{ "$search": { "text": { "query": "sign-in", "path": "message" } } } SCORE: 0.6722691059112549 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
[ { _id: 3, message: 'try to sign-in' } ]
MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3
토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 sign-in
포함된 whitespace
문서 를 반환합니다. standard
토크나이저 사용하여 message
필드 인덱스 하면 MongoDB Search는 검색 sign-in
텀 대해 _id: 1
, _id: 2
, _id: 3
이 포함된 문서를 반환합니다.
다음 표는 whitespace
토크나이저와 이와는 대조적인 standard
토크나이저가 _id: 3
을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.
토크나이저 | Token Outputs |
---|---|
|
|
|
|