토큰 필터는 다음과 같은 작업을 수행합니다.
어간 처리: "talking", "talked", "talks"와 같은 관련 단어를 어근인 "talk"로 줄입니다.
편집: 공개 문서에서 민감한 정보를 제거합니다.
토큰 필터에는 유형 필드가 필요하며, 일부 토크나이저에는 추가 옵션도 필요합니다.
"tokenFilters": [ { "type": "<token-filter-type>", "<additional-option>": <value> } ]
토큰 필터 유형
MongoDB Search는 다음 유형의 토큰 필터하다 지원합니다.
다음 샘플 인덱스 정의 및 쿼리는 라는 샘플 컬렉션 minutes 사용합니다. 이 예제를 따라 진행하려면 minutes 클러스터 에서 컬렉션 Create a Search Index 로드하고 MongoDB 검색 인덱스 만들기 튜토리얼의 단계에 따라 Atlas UI 의 페이지로 이동합니다. 그런 다음 minutes 컬렉션 데이터 소스 로 선택하고 예시 절차에 따라 Atlas UI 에서 또는 를 사용하여 인덱스 mongosh 생성합니다.
Select your language 드롭다운 메뉴를 사용하여 이 페이지에서 예시의 언어를 설정합니다.
asciiFolding
asciiFolding 토큰 필터는 기본 라틴 유니코드 블록에 없는 알파벳, 숫자 및 기호 유니코드 문자를 사용 가능한 경우 해당 ASCII로 변환합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 | no | 토큰 필터의 출력에 원래 토큰을 포함할지 또는 생략할지 여부를 지정하는 문자열입니다. 값은 다음 중 하나일 수 있습니다:
기본값: |
예시
다음 인덱스 정의는 asciiConverter라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.first_name 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
asciiFolding토큰 필터를 적용하여 필드 값을 ASCII에 해당하는 값으로 변환합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
asciiConverter을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운 메뉴에서 asciiFolding 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping를 클릭하여 _updated_by.first_name필드에 사용자 지정 분석기를 적용합니다.
page_updated_by.first_name를 Field Name 드롭다운에서 Data Type의 문자열과 함께 선택하세요.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
asciiConverter선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "dynamic": false, "fields": { "first_name": { "type": "string", "analyzer": "asciiConverter" } } } } }, "analyzers": [ { "name": "asciiConverter", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "asciiFolding" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "page_updated_by": { 8 "type": "document", 9 "dynamic": false, 10 "fields": { 11 "first_name": { 12 "type": "string", 13 "analyzer": "asciiConverter" 14 } 15 } 16 } 17 } 18 }, 19 "analyzers": [ 20 { 21 "name": "asciiConverter", 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "asciiFolding" 28 } 29 ] 30 } 31 ] 32 } 33 )
다음 쿼리는 minutes 컬렉션의 first_name 필드에서 ASCII에 해당하는 이름을 사용하여 이름을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "Sian", "path": "page_updated_by.first_name" } } }
SCORE: 0.5472603440284729 _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: "Cette page traite des réunions de département"
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Sian", "path": "page_updated_by.first_name" } } }, { "$project": { "_id": 1, "page_updated_by.last_name": 1, "page_updated_by.first_name": 1 } } ])
[ { _id: 1, page_updated_by: { last_name: 'AUERBACH', first_name: 'Siân'} } ]
MongoDB Search는 문서 _id: 1 의 {MongoDB} 필드 에 대해 다음 토큰(검색 가능한 용어)을 page_updated_by.first_name 생성한 다음 쿼리 텀 과 일치시키는 데 사용했기 때문에 결과에 가 포함된 문서 Sian 반환합니다.
필드 이름 | 출력 토큰 |
|---|---|
|
|
daitchMokotoffSoundex
The daitchMokotoffSoundex 토큰 필터하다 Daitch-Mokotoff 사운덱스 음성 알고리즘 기반으로 소리가 동일한 단어에 대한 토큰을 생성합니다. 이 필터하다 각 입력에 대해 여러 인코딩을 생성할 수 있으며, 인코딩된 각 토큰은 6 자리 숫자입니다.
참고
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 | no | 토큰 필터의 출력에 원래 토큰을 포함할지 또는 생략할지 여부를 지정하는 문자열입니다. 값은 다음 중 하나일 수 있습니다:
기본값: |
예시
다음 인덱스 정의는 dmsAnalyzer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.last_name 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
daitchMokotoffSoundex토큰 필터를 적용하여 같은 소리의 단어에 대해 토큰을 인코딩합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
dmsAnalyzer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 daitchMokotoffSoundex 선택하고 originalTokens 필드에 대해 다음 표에 표시된 값을 선택합니다.
필드값originalTokensinclude사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.last_name에 사용자 지정 분석기를 적용합니다.
page_updated_by.last_name을 Field Name 드롭다운에서 Data Type의 문자열과 함께 선택하세요.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
dmsAnalyzer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "dynamic": false, "fields": { "last_name": { "type": "string", "analyzer": "dmsAnalyzer" } } } } }, "analyzers": [ { "name": "dmsAnalyzer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "daitchMokotoffSoundex", "originalTokens": "include" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "page_updated_by": { 8 "type": "document", 9 "dynamic": false, 10 "fields": { 11 "last_name": { 12 "type": "string", 13 "analyzer": "dmsAnalyzer" 14 } 15 } 16 } 17 } 18 }, 19 "analyzers": [ 20 { 21 "name": "dmsAnalyzer", 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "daitchMokotoffSoundex", 28 "originalTokens": "include" 29 } 30 ] 31 } 32 ] 33 } 34 )
다음 쿼리는 minutes 컬렉션의 page_updated_by.last_name 필드에서 AUERBACH와 비슷하게 들리는 용어를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "AUERBACH", "path": "page_updated_by.last_name" } } }
SCORE: 0.568153440952301 _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.521163284778595 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object last_name: "OHRBACH" first_name: "Noël" email: "ohrbach@example.com" phone: "(123) 456 0987" text: Object en_US: "The head of the sales department spoke first." fa_IR: "ابتدا رئیس بخش فروش صحبت کرد" sv_FI: "Först talade chefen för försäljningsavdelningen"
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "AUERBACH", "path": "page_updated_by.last_name" } } }, { "$project": { "_id": 1, "page_updated_by.last_name": 1 } } ])
[ { "_id" : 1, "page_updated_by" : { "last_name" : "AUERBACH" } } { "_id" : 2, "page_updated_by" : { "last_name" : "OHRBACH" } } ]
두 문서의 용어가 음성적으로 유사하고 동일한 6자리 숫자(097400 및 097500)를 사용하여 코딩되어 있기 때문에 MongoDB Search는 _id: 1 및 _id: 2 이 포함된 문서를 반환합니다. 다음 표는 MongoDB Search가 결과의 문서에 대해 생성하는 토큰(검색 가능한 용어 및 6자리 인코딩)을 보여줍니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
|
|
edgeGram
edgeGram 토큰 필터는 텍스트 입력의 왼쪽 또는 '가장자리'로부터의 입력을 구성된 크기의 n-그램으로 토큰화합니다.
참고
일반적으로 토큰 필터는 파이프라인 과 유사하게 작동하며, 각 입력 토큰은 하나 이상의 출력 토큰을 생성한 다음 후속 토큰에 입력됩니다. 반면 edgeGram 토큰 필터하다 단일 입력 토큰에서 여러 출력 토큰을 생성하는 그래프 생성 필터하다 입니다.
동의어 및 자동 완성 필드 유형 매핑 정의는 그래프를 생성하지 않는 토큰 필터와 함께 사용할 때만 작동하므로 동의어 또는 자동 완성 필드 유형 매핑 정의에는 edgeGram 토큰 필터를 사용할 수 없습니다.
regex (MongoDB 검색 연산자) 또는 wildcard 연산자로 쿼리하는 경우 입력 토큰당 둘 이상의 출력 토큰을 생성하므로 edgeGram 토큰 필터를 searchAnalyzer (으)로 사용할 수 없습니다. 인덱스 정의에서 searchAnalyzer (으)로 다른 분석기 지정합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | 네 | 생성되는 n-그램의 최소 길이를 지정하는 숫자입니다. 값은 |
| integer | 네 | 생성되는 n-그램의 최대 길이를 지정하는 숫자입니다. 값은 |
| 문자열 | no | 토큰을
기본값: |
예시
다음 인덱스 정의는 titleAutocomplete라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 필터를 적용합니다.
icuFolding토큰 필터를 사용하여 토큰에 문자 접기를 적용합니다.edgeGram토큰 필터를 사용하여 왼쪽에서 4~7자 길이의 토큰을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
titleAutocomplete을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 icuFolding을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 edgeGram 선택하고 필드에 대해 다음 표에 표시된 값을 입력합니다.
필드값minGram4
maxGram7
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
titleAutocomplete선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "titleAutocomplete", "mappings": { "dynamic": false, "fields": { "title": { "type": "string", "analyzer": "titleAutocomplete" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuFolding" }, { "type": "edgeGram", "minGram": 4, "maxGram": 7 } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "titleAutocomplete", 5 "mappings": { 6 "dynamic": false, 7 "fields": { 8 "title": { 9 "type": "string", 10 "analyzer": "titleAutocomplete" 11 } 12 } 13 }, 14 "analyzers": [ 15 { 16 "name": "titleAutocomplete", 17 "charFilters": [], 18 "tokenizer": { 19 "type": "standard" 20 }, 21 "tokenFilters": [ 22 { 23 "type": "icuFolding" 24 }, 25 { 26 "type": "edgeGram", 27 "minGram": 4, 28 "maxGram": 7 29 } 30 ] 31 } 32 ] 33 } 34 )
다음 쿼리는 minutes 컬렉션의 title 필드에서 mee로 시작하고 그 뒤로 다른 문자 여러 개가 이어지는 용어를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }
SCORE: 1 _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: 1 _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>"
db.minutes.aggregate([ { "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
문서에 쿼리 기준과 일치하는 meeting라는 텀 포함되어 있기 때문에 MongoDB Search는 _id: 1 및 _id: 3 이 포함된 문서를 반환합니다. 구체적으로 MongoDB Search는 결과의 문서에 대해 다음과 같은 4 ~ 7 문자 토큰(검색 가능한 용어)을 생성한 다음 쿼리 텀 mee*와 일치시킵니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
|
|
englishPossessive
englishPossessive 토큰 필터는 단어에서 소유격(단어 끝의 's)을 제거합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 englishPossessiveStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰(검색어)을 생성합니다.
EnglishPossessive 토큰 필터를 적용하여 토큰에서 소유격(후행
's)을 제거합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
englishPossessiveStemmer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운 메뉴에서 englishPossessive 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
englishPossessiveStemmer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "englishPossessiveStemmer" } } }, "analyzers": [ { "name": "englishPossessiveStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "type": "string", 8 "analyzer": "englishPossessiveStemmer" 9 } 10 } 11 }, 12 "analyzers": [ 13 { 14 "name": "englishPossessiveStemmer", 15 "charFilters": [], 16 "tokenizer": { 17 "type": "standard" 18 }, 19 "tokenFilters": [ 20 { 21 "type": "englishPossessive" 22 } 23 ] 24 } 25 ] 26 } 27 )
다음 쿼리는 minutes 컬렉션의 title 필드에서 용어 team을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "team", "path": "title" } } }
SCORE: 0.34314215183258057 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object SCORE: 0.29123833775520325 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "team", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 2, title: 'The check-in with sales team' } ]
MongoDB Search는 title 필드 에 team 이라는 텀 포함된 결과를 반환합니다. MongoDB Search는 _id: 1 team's title team 분석 중에 {MongoDB} 필드 의 를 토큰 로 변환하기 때문에 가 포함된 문서 를 반환합니다. 구체적으로 MongoDB Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 텀 와 일치시킵니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
|
|
flattenGraph
flattenGraph 토큰 필터는 토큰 필터 그래프를 인덱싱에 적합한 평면 형태로 변환합니다. wordDelimiterGraph 토큰 필터를 사용하는 경우, 이 필터를 wordDelimiterGraph 토큰 필터 뒤에 사용하세요.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 wordDelimiterGraphFlatten이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.
토큰에 다음 필터를 적용합니다.
wordDelimiterGraph 토큰 필터를 사용하여 하위 단어를 기준으로 토큰을 분할하고, 원래 단어에 대한 토큰을 생성하며,
SIGN_IN단어가 구분되지 않도록 보호합니다.flattenGraph 토큰 필터를 적용하여 토큰을 단순화된 플랫 형태로 변환합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
wordDelimiterGraphFlatten을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 wordDelimiterGraph 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다.
다음 필드를 선택합니다:
필드값delimiterOptions.generateWordPartstrue
delimiterOptions.preserveOriginaltrue
protectedWords.words필드에SIGN_IN을 입력합니다.protectedWords.ignoreCase0}을 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 flattenGraph 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
wordDelimiterGraphFlatten선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "message": { "type": "string", "analyzer": "wordDelimiterGraphFlatten" } } }, "analyzers": [ { "name": "wordDelimiterGraphFlatten", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "delimiterOptions" : { "generateWordParts" : true, "preserveOriginal" : true }, "protectedWords": { "words": [ "SIGN_IN" ], "ignoreCase": false } }, { "type": "flattenGraph" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "message": { 7 "type": "string", 8 "analyzer": "wordDelimiterGraphFlatten" 9 } 10 } 11 }, 12 "analyzers": [ 13 { 14 "name": "wordDelimiterGraphFlatten", 15 "charFilters": [], 16 "tokenizer": { 17 "type": "whitespace" 18 }, 19 "tokenFilters": [ 20 { 21 "type": "wordDelimiterGraph", 22 "delimiterOptions": { 23 "generateWordParts": true, 24 "preserveOriginal": true 25 }, 26 "protectedWords": { 27 "words": [ 28 "SIGN_IN" 29 ], 30 "ignoreCase": false 31 } 32 }, 33 { 34 "type": "flattenGraph" 35 } 36 ] 37 } 38 ] 39 } 40 )
다음 쿼리는 minutes 컬렉션의 message 필드에서 용어 sign을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "sign", "path": "message" } } }
SCORE: 0.6763891577720642 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 3, message: 'try to sign-in' } ]
문서 에 title 필드 에 하이픈으로 연결된 텀 sign-in 가 포함되어 있어도 MongoDB Search는 쿼리 텀 sign 에 대한 결과에서 _id: 3 이 포함된 문서 반환합니다. wordDelimiterGraph 토큰 필터하다 토큰 필터하다 그래프 생성하고 flattenGraph 토큰 필터하다 토큰 필터하다 그래프 인덱싱 에 적합한 플랫한 형태로 변환합니다. 구체적으로 MongoDB Search는 결과에서 문서 에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 텀 sign과 일치시킵니다.
문서 ID | 출력 토큰 |
|
|
icuFolding
토큰 필터하다 icuFolding 악센트 제거, 대소문자 접기, 표준 중복 접기 등과 같은 유니코드 기술 보고서 # 의30 문자 접기를 적용하며, 기타 보고서에 자세히 설명되어 있습니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 diacriticFolder라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.sv_FI 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
키워드 토크나이저를 적용하여 문자열 필드에 있는 모든 용어를 단일 용어로 토큰화합니다.
icuFolding토큰 필터를 사용하여 악센트 제거, 대소문자 접기, 표준 중복 접기 등과 같은 접기를 적용할 수 있습니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
diacriticFolder을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 keyword 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운 메뉴에서 icuFolding 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping 클릭하여 text.sv_FI중첩 필드에 적용합니다.
중첩된 text.sv_FI을 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
diacriticFolder선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "diacriticFolder", "mappings": { "fields": { "text": { "type": "document", "fields": { "sv_FI": { "analyzer": "diacriticFolder", "type": "string" } } } } }, "analyzers": [ { "name": "diacriticFolder", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "icuFolding" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "diacriticFolder", 5 "mappings": { 6 "fields": { 7 "text": { 8 "type": "document", 9 "fields": { 10 "sv_FI": { 11 "analyzer": "diacriticFolder", 12 "type": "string" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "diacriticFolder", 21 "charFilters": [], 22 "tokenizer": { 23 "type": "keyword" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "icuFolding" 28 } 29 ] 30 } 31 ] 32 } 33 )
다음 쿼리 와일드카드 연산자 사용하여 text.sv_FI minutes 컬렉션 의 필드 에서 텀 avdelning 앞뒤로 다른 문자 여러 개를 포함하는 모든 용어를 검색 .
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "wildcard": { "query": "*avdelning*", "path": "text.sv_FI", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object 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: 1 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object en_US: "The head of the sales department spoke first." fa_IR: "ابتدا رئیس بخش فروش صحبت کرد" sv_FI: "Först talade chefen för försäljningsavdelningen"
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "*avdelning*", "path": "text.sv_FI", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "text.sv_FI": 1 } } ])
[ { _id: 1, text: { sv_FI: 'Den här sidan behandlar avdelningsmöten' } }, { _id: 2, text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' } } ]
MongoDB Search는 결과에서 _id: 1 및 이 있는 문서 _id: 2 반환하는데, 이는 문서에 이라는 avdelning 쿼리 텀 _id: 1 이 있는 문서 에서 다른 문자 뒤에 _id: 2 오고, 문서 의 앞뒤에. 구체적으로 MongoDB Search는 결과의 문서에 대해 다음과 같은 토큰을 생성한 다음 쿼리 텀 *avdelning*과 일치시킵니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
|
|
icuNormalizer
icuNormalizer 토큰 필터하다 표준 유니코드 정규화 모드.를 사용하여 토큰을 정규화합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 | no | 적용할 정규화 형식입니다. 허용되는 값은 다음과 같습니다.
지원되는 정규화 형식에 대해 자세히 학습 1.2섹션: 정규화 형식, UTR#15.을 참조하세요. 기본값: |
예시
다음 인덱스 정의는 textNormalizer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
공백 토크나이저를 사용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성할 수 있습니다.
icuNormalizer토큰 필터를 사용하여 호환성 분해로 토큰을 정규화한 다음 표준 구성으로 토큰을 정규화하세요.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
textNormalizer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 icuNormalizer 을 선택하고 normalizationForm 드롭다운에서
nfkc을 선택합니다.사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
textNormalizer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "textNormalizer", "mappings": { "fields": { "message": { "type": "string", "analyzer": "textNormalizer" } } }, "analyzers": [ { "name": "textNormalizer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkc" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "textNormalizer", 5 "mappings": { 6 "fields": { 7 "message": { 8 "type": "string", 9 "analyzer": "textNormalizer" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "textNormalizer", 16 "charFilters": [], 17 "tokenizer": { 18 "type": "whitespace" 19 }, 20 "tokenFilters": [ 21 { 22 "type": "icuNormalizer", 23 "normalizationForm": "nfkc" 24 } 25 ] 26 } 27 ] 28 } 29 )
다음 쿼리는 minutes 컬렉션의 message 필드에서 용어 1을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "1", "path": "message" } } } SCORE: 0.4342196583747864 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "1", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]
MongoDB Search는 icuNormalizer 토큰 필터하다 다음에 대해 토큰 1 를 생성하기 때문에 문서 message 필드 에 원으로 표시된 숫자 ① 가 포함되어 있어도 쿼리 텀 1 에 대한 결과에서 _id: 2 이(가) 포함된 문서 를 반환합니다. nfkc 정규화 형식을 사용하여 이 문자를 변환합니다. 다음 표는 MongoDB Search가 nfkc 정규화 형식을 사용하여 결과에서 문서 에 대해 생성하는 토큰(검색 가능한 용어)과 다른 정규화 형식에 대해 생성하는 토큰을 비교하여 보여 줍니다.
정규화 형식 | 출력 토큰 | 경기 |
|
| X |
|
| X |
|
| √ |
|
| √ |
keywordRepeat
토큰 필터하다 들어오는 각 토큰을 키워드와 비키워드로 두 번 방출합니다. 후속 토큰 필터를 사용하여 키워드가 아닌 토큰을 어간 처리하고 키워드 토큰을 keywordRepeat 보존할 수 있습니다. 이를 통해 정확한 일치 항목을 높이고 어간 일치 항목을 조회 할 수 있습니다. 이는 일반적으로 porterStemming 과 같은 형태소 분석 필터하다 와 함께 사용되며, 그 뒤에 removeDuplicates가 사용됩니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 keywordStemRemover라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.
토큰에 다음 필터를 적용합니다.
키워드 반복 토큰 필터하다 토큰을 두 번 생성하는데, 한 번은 키워드 토큰으로, 한 번은 키워드가 아닌 토큰으로 생성합니다.
porterStemming 토큰 필터하다 사용하여 키워드가 아닌 토큰에서 일반적인 형태소 및 굴절 접미사를 제거 .
removeDuplicates를 사용하여 스트림 의 이전 토큰과 동일한 텀 으로 동일한 위치에 있는 토큰을 필터하다 .
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
keywordStemRemover을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 keywordRepeat 을 선택하고 Add token filter 을 클릭합니다.
Add token filter 를 클릭하여 사용자 사용자 지정 분석기 에 다음 토큰 필터를 추가합니다.
removeDuplicates
porterStemming
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
keywordStemRemover선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "keywordStemRemover", "type": "string" } } }, "analyzers": [ { "name": "keywordStemRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "porterStemming" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "title": { 8 "analyzer": "keywordStemRemover", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "keywordStemRemover", 16 "tokenFilters": [ 17 { 18 "type": "keywordRepeat" 19 }, 20 { 21 "type": "porterStemming" 22 }, 23 { 24 "type": "removeDuplicates" 25 } 26 ], 27 "tokenizer": { 28 "type": "whitespace" 29 } 30 } 31 ] 32 } 33 )
다음 쿼리 title 연산자를 mee* 사용하여 minutes 컬렉션 의 필드 wildcard 에서 텀 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object title: "The team's weekly meeting" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object title: "The regular board meeting"
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: "The team's weekly meeting" }, { _id: 3, title: 'The regular board meeting' } ]
MongoDB Search는 제목 필드 에 meeting 이라는 텀 포함된 문서를 반환합니다. keywordRepeat 토큰 필터하다 결과의 문서에 대해 다음 토큰을 생성합니다.
제목 | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
porterStemming 토큰 필터하다 키워드가 아닌 토큰을 루트 기본 형식으로 줄입니다.
제목 | Stemmed Non-Keyword Tokens |
|---|---|
|
|
|
|
removeDuplicates 토큰 필터하다 이전 keywordRepeat 토큰 필터하다 에 의해 생성된 스트림 에서 중복된 토큰을 제거합니다.
제목 | Tokens |
|---|---|
|
|
|
|
kStemming
kStemming 토큰 필터는 어간 처리 알고리즘과 내장된 영어 사전을 조합하여 단어의 어간을 처리합니다. 소문자 텍스트를 사용하며 대문자 텍스트는 수정하지 않습니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 kStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.en_US 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 필터를 적용합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
kStemmer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 kStemming 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 text.en_US을 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
kStemmer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "kStemmer", "mappings": { "dynamic": true }, "analyzers": [ { "name": "kStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "kStemming" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "kStemmer", 5 "mappings": { 6 "dynamic": true 7 }, 8 "analyzers": [ 9 { 10 "name": "kStemmer", 11 "tokenizer": { 12 "type": "standard" 13 }, 14 "tokenFilters": [ 15 { 16 "type": "lowercase" 17 }, 18 { 19 "type": "kStemming" 20 } 21 ] 22 } 23 ] 24 } 25 )
다음 쿼리는 minutes 컬렉션의 text.en_US 필드에서 용어 Meeting을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "Meeting", "path": "text.en_US" } } } SCORE: 0.5960260629653931 _id: "1" message: "try to siGn-In" page_updated_by: Object 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"
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Meeting", "path": "text.en_US" } } }, { "$project": { "_id": 1, "text.en_US": 1 } } ])
[ { _id: 1, text: { en_US: '<head> This page deals with department meetings. </head>' } } ]
MongoDB Search는 _id: 1이 있는 문서 반환하며, 여기에는 소문자로 된 복수형 텀 meetings 가 포함됩니다. 소문자 토큰 필터하다 토큰 텍스트를 소문자로 정규화하고 kStemming 토큰 필터하다 meetings text.en_US 문서 의 필드 에 있는 복수형 을 단수형 쿼리 용어와 일치시키기 때문에 MongoDB Search MongoDB 쿼리 텀 텀 문서 일치시킵니다. 또한 MongoDB Search는 인덱스 분석기 (또는 지정된 경우 searchAnalyzer 사용)를 사용하여 쿼리 텀 를 분석합니다. 구체적으로 MongoDB Search는 결과에서 문서 에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 이를 쿼리 텀 와 일치시키는 데 사용합니다.
head, this, page, deal, with, department, meeting, head
분량
length 토큰 필터는 너무 짧거나 너무 긴 토큰을 제거합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | no | 토큰의 최소 길이를 지정하는 숫자입니다. 값은 기본값: |
| integer | no | 토큰의 최대 길이를 지정하는 숫자입니다. 값은 기본값: |
예시
다음 인덱스 정의는 longOnly라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.sv_FI 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 사용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 필터를 적용합니다.
icuFolding 토큰 필터를 사용하여 문자 접기를 적용합니다.
length토큰화 후 UTF-16 코드 단위가 20개 이상인 토큰만 인덱싱하는 토큰 필터입니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
longOnly을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 icuFolding을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 length 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다:
필드값min20사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.sv.FI 중첩 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 중첩된 text.sv.FI를 선택하고 Field Name Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
longOnly선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "text": { "type": "document", "dynamic": true, "fields": { "sv_FI": { "type": "string", "analyzer": "longOnly" } } } } }, "analyzers": [ { "name": "longOnly", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuFolding" }, { "type": "length", "min": 20 } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "text": { 7 "type": "document", 8 "dynamic": true, 9 "fields": { 10 "sv_FI": { 11 "type": "string", 12 "analyzer": "longOnly" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "longOnly", 21 "charFilters": [], 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "icuFolding" 28 }, 29 { 30 "type": "length", 31 "min": 20 32 } 33 ] 34 } 35 ] 36 } 37 )
다음 쿼리는 minutes 컬렉션의 text.sv_FI 필드에서 용어 forsaljningsavdelningen을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "forsaljningsavdelningen", "path": "text.sv_FI" } } } SCORE: 0.13076457381248474 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object en_US: "The head of the sales department spoke first." fa_IR: "ابتدا رئیس بخش فروش صحبت کرد" sv_FI: "Först talade chefen för försäljningsavdelningen"
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "forsaljningsavdelningen", "path": "text.sv_FI" } } }, { "$project": { "_id": 1, "text.sv_FI": 1 } } ])
[ { _id: 2, text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' } } ]
MongoDB Search는 försäljningsavdelningen이라는 텀 포함된 _id: 2이 있는 문서 를 반환합니다. 텀 20 자를 초과하기 때문에 MongoDB Search는 문서 쿼리 텀 와 일치시킵니다. 또한 쿼리 텀 forsaljningsavdelningen 에 분음 부호 문자가 포함되어 있지 않지만 MongoDB Search는 문서 의 원래 텀 에 있는 분음 부호를 접어서 쿼리 텀 문서 와 일치시킵니다. 구체적으로 MongoDB Search는 _id: 2가 있는 문서 에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성합니다.
forsaljningsavdelningen
필드 의 다른 모든 용어가 20 자 미만이므로 MongoDB Search는 컬렉션 의 text.sv_FI 필드 에 있는 다른 텀 에 대한 검색 결과를 반환하지 않습니다.
소문자
lowercase 토큰 필터는 토큰 텍스트를 소문자로 정규화합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의 예시에서는 회의록 collection의 title 필드를 nGram 토큰화 전략을 사용하여 자동 완성 유형으로 인덱싱합니다. title필드에 keywordLowerer이라는 사용자 지정 분석기를 적용합니다. 사용자 지정 분석기는 다음을 지정합니다:
키워드 토크나이저를 적용하여 문자열 또는 문자열 배열에 대한 단일 토큰을 생성합니다.
lowercase토큰 필터를 적용하여 토큰 텍스트를 소문자로 변환합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
keywordLowerer을 입력합니다.Tokenizer이 접혀 있으면 펼친 다음 드롭다운에서 keyword을 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name드롭다운에서 제목을 선택하고 Data Type드롭다운에서 자동 완성을 선택합니다.
데이터 유형의 속성 섹션에 있는 속성 드롭다운에서 다음 값을 선택합니다.
속성 이름값Analyzer
keywordLowererTokenization
nGram
Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
{ "mappings": { "fields": { "title": { "analyzer": "keywordLowerer", "tokenization": "nGram", "type": "autocomplete" } } }, "analyzers": [ { "name": "keywordLowerer", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "analyzer": "keywordLowerer", 8 "tokenization": "nGram", 9 "type": "autocomplete" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "keywordLowerer", 16 "charFilters": [], 17 "tokenizer": { 18 "type": "keyword" 19 }, 20 "tokenFilters": [ 21 { 22 "type": "lowercase" 23 } 24 ] 25 } 26 ] 27 } 28 )
다음 쿼리는 자동 완성 연산자를 사용하여 title 필드에서 문자 standup을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "autocomplete": { "query": "standup", "path": "title" } } } SCORE: 0.9239386320114136 _id: “4” message: "write down your signature or phone №" page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "autocomplete": { "query": "standup", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]
문서 쿼리 텀 standup가 포함되어 있기 때문에 MongoDB Search는 결과에 _id: 4 이 포함된 문서 를 반환합니다. MongoDB Search는 자동 완성 유형에 대해 keyword 토크나이저, lowercase 토큰 필터 및 nGram 토큰화 전략을 사용하여 title 필드에 대한 토큰을 생성합니다. 구체적으로 MongoDB Search는 keyword 토크나이저 사용하여 전체 문자열을 단일 토큰으로 토큰화한 다음, 전체 문자열에서 정확히 일치하는 항목만 지원합니다. 그런 다음 lowercase 토큰 필터하다 사용하여 토큰을 소문자로 변환합니다. 결과의 문서 에 대해 MongoDB Search는 사용자 지정 분석기 사용하여 다음 토큰을 생성합니다.
문서 ID | 출력 토큰 |
|
|
사용자 지정 분석기 적용한 후 MongoDB Search MongoDB 인덱스 정의에 지정된 대로 title 필드를 자동 완성 유형으로 인덱스하기 때문에 n-gram의 토큰을 추가로 생성합니다. MongoDB Search는 standup에 대한 토큰이 포함된 n-gram 토큰을 사용하여 문서 쿼리 텀 standup과 일치시킵니다.
다음 인덱스 정의는 lowerCaser라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 분리 규칙에 따라 토큰을 생성합니다.
토큰에 다음 필터를 적용합니다.
icuNormalizer는 표준 유니코드 정규화 모드를 사용하여 토큰을 정규화합니다.
lowercase토큰 텍스트를 소문자로 변환하는 토큰 필터.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
lowerCaser을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 icuNormalizer 을 선택한 다음 normalizationForm 드롭다운에서
nfkd을 선택합니다.사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 lowercase 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
lowerCaser선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
{ "mappings": { "fields": { "message": { "type": "string", "analyzer": "lowerCaser" } } }, "analyzers": [ { "name": "lowerCaser", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkd" }, { "type": "lowercase" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "message": { 7 "type": "string", 8 "analyzer": "lowerCaser" 9 } 10 } 11 }, 12 "analyzers": [ 13 { 14 "name": "lowerCaser", 15 "charFilters": [], 16 "tokenizer": { 17 "type": "standard" 18 }, 19 "tokenFilters": [ 20 { 21 "type": "icuNormalizer", 22 "normalizationForm": "nfkd" 23 }, 24 { 25 "type": "lowercase" 26 } 27 ] 28 } 29 ] 30 } 31 )
다음 쿼리는 message 필드에서 sign-in라는 용어를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "sign-in", "path": "message" } } } SCORE: 0.37036222219467163 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object SCORE: 0.37036222219467163 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object SCORE: 0.2633555233478546 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign-in", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }, { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]
MongoDB Search는 _id: 1 _id: 3 _id:
2 sign-in icuNormalizer 토크나이저 먼저 하이픈으로 연결된 단어를 포함하여 텍스트를 분할하여 별도의 토큰 텀 생성하지만 , 문서 의 원래 대소문자를 lowercase 변환한 다음 토큰 필터하다 토큰을 소문자로 변환합니다. 또한 MongoDB Search는 인덱스 분석기 사용하여(또는 지정된 경우 searchAnalyzer를 사용하여) 쿼리 텀 분석하여 쿼리 텀 분할 하고 문서 와 일치시킵니다.
정규화 형식 | 출력 토큰 |
|
|
|
|
|
|
nGram
nGram 토큰 필터는 입력을 구성된 크기의 n-그램으로 토큰화합니다. 동의어 또는 자동 완성 매핑 정의에는 nGram 토큰 필터를 사용할 수 없습니다.
참고
regex (MongoDB 검색 연산자) 또는 wildcard 연산자로 쿼리하는 경우 입력 토큰당 둘 이상의 출력 토큰을 생성하므로 ngram 토큰 필터를 searchAnalyzer (으)로 사용할 수 없습니다. 인덱스 정의에서 searchAnalyzer (으)로 다른 분석기 지정합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | 네 | 생성되는 n-그램의 최소 길이를 지정하는 숫자입니다. 값은 |
| integer | 네 | 생성되는 n-그램의 최대 길이를 지정하는 숫자입니다. 값은 |
| 문자열 | no | 토큰을
기본값: |
예시
다음 인덱스 정의는 titleAutocomplete이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 키워드 분석기 를 searchAnalyzer(으)로 지정합니다. 사용자 지정 분석기 함수는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성합니다.
토큰에 일련의 토큰 필터를 적용합니다.
englishPossessive을(를) 사용하여 단어에서 소유격(단어 끝의's)을 제거합니다.nGram을(를) 사용하여 단어를 4~7자 길이로 토큰화합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
titleAutocomplete을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 englishPossessive을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 nGram 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다:
필드값minGram4
maxGram7
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
titleAutocomplete선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "titleAutocomplete", "searchAnalyzer": "lucene.keyword" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" }, { "type": "nGram", "minGram": 4, "maxGram": 7 } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "type": "string", 8 "analyzer": "titleAutocomplete", 9 "searchAnalyzer": "lucene.keyword" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "titleAutocomplete", 16 "charFilters": [], 17 "tokenizer": { 18 "type": "standard" 19 }, 20 "tokenFilters": [ 21 { 22 "type": "englishPossessive" 23 }, 24 { 25 "type": "nGram", 26 "minGram": 4, 27 "maxGram": 7 28 } 29 ] 30 } 31 ] 32 } 33 )
다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 title 필드에서 용어 meet과 해당 용어 뒤로 다른 문자 여러 개가 이어지는 용어를 모두 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "wildcard": { "query": "meet*", "path": "title", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object title: "The team's weekly meeting" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object title: "The regular board meeting"
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "meet*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
문서에 meeting 텀 포함되어 있기 때문에 MongoDB Search는 _id: 1 및 _id: 3 이 있는 문서를 반환하며, MongoDB Search는 다음 토큰(검색 가능한 용어)을 생성하여 쿼리 기준 meet* 과 일치시킵니다.
정규화 형식 | 출력 토큰 |
|---|---|
|
|
|
|
참고
MongoDB Search는 termNotInBounds 매개 변수가 기본값 으로 omit 로 설정하다 있기 때문에 4 자 미만(예: the) 및 7 초과의 용어에 대해서는 토큰을 생성하지 않습니다. termNotInBounds 매개변수의 값을 include로 설정하다 MongoDB Search는 the 라는 텀 에 대한 토큰도 생성합니다.
porterStemming
porterStemming 토큰 필터는 포터 어간 처리 알고리즘을 사용하여 영어 단어에서 일반적인 어간 및 굴절 접미사를 제거합니다. 소문자 텍스트가 처리되며 대문자 텍스트는 처리되지 않습니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 porterStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 토큰 필터를 적용합니다.
lowercase 토큰 필터: 단어를 소문자로 변환합니다.
porterStemming 토큰 필터: 단어에서 일반적인 형태소 및 굴절 접미사를 제거합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
porterStemmer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 porterStemming 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
porterStemmer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "porterStemmer" } } }, "analyzers": [ { "name": "porterStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "porterStemming" } ] } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "title": { "type": "string", "analyzer": "porterStemmer" } } }, "analyzers": [ { "name": "porterStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "porterStemming" } ] } ] })
다음 쿼리는 minutes 컬렉션의 title 필드에서 용어 Meet을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "Meet", "path": "title" } } } SCORE: 0.34314215183258057 _id: “1” message: "try to siGn-In" page_updated_by: Object text: Object SCORE: 0.34314215183258057 _id: “3” message: "try to sign-in" page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Meet", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
소문자 토큰 필터하다 _id: 1 _id: 3 토큰 텍스트를 소문자로 정규화한 다음 porterStemming 토큰 필터하다 토큰에서 형태소 접미사를 제거하여 토큰을 생성하기 때문에 MongoDB Search는 및 meeting meet 이 있는 문서를 반환합니다. MongoDB Search는 쿼리 텀 Meet 과 일치합니다. 구체적으로 MongoDB Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 텀 Meet와 일치시킵니다.
정규화 형식 | 출력 토큰 |
|---|---|
|
|
|
|
정규식
regex 토큰 필터는 각 토큰에 Java 정규식 구문을 사용한 정규 표현식을 적용하여 일치 항목을 지정된 string로 바꿉니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 문자열 | 네 | 사람이 읽을 수 있는 레이블로 이 토큰 필터를 식별합니다. 값은 | |||||||||||||||||||||
| 문자열 | 네 | 각 토큰에 적용할 표현식 패턴입니다. | |||||||||||||||||||||
| 문자열 | 네 | 일치하는 패턴이 발생할 때마다 대체할 대체 문자열입니다. 토큰을 무시하거나 삭제 위해 빈 문자열( | |||||||||||||||||||||
| 문자열 | 네 | 허용되는 값은 다음과 같습니다.
|
예시
다음 인덱스 정의는 emailRedact라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.email 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
키워드 토크나이저를 적용하여 필드 값의 모든 단어를 단일 용어로 인덱싱합니다.
토큰에 다음 토큰 필터를 적용합니다.
lowercase 토큰 필터를 사용하여 토큰의 대문자를 소문자로 바꿀 수 있습니다.
regex토큰 필터를 사용하여 토큰에서 이메일 주소처럼 보이는 문자열을 찾아redacted라는 단어로 바꿉니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
emailRedact을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 keyword 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 regex 선택하고 토큰 필터에 대해 다음을 구성합니다.
pattern 필드에
^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$을 입력합니다.replacement 필드에
redacted을 입력합니다.matches 드롭다운 메뉴에서
all을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 중첩 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 중첩된 page_updated_by.email을 선택하고 Data Type드롭다운에서 문자열을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
emailRedact선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "fields": { "email": { "type": "string", "analyzer": "emailRedact" } } } } }, "analyzers": [ { "charFilters": [], "name": "emailRedact", "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" }, { "matches": "all", "pattern": "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$", "replacement": "redacted", "type": "regex" } ] } ] }
db.minutes.createSearchIndex("default", { "analyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "fields": { "email": { "type": "string", "analyzer": "emailRedact" } } } } }, "analyzers": [ { "charFilters": [], "name": "emailRedact", "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" }, { "matches": "all", "pattern": "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$", "replacement": "redacted", "type": "regex" } ] } ] })
다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 page_updated_by.email 필드에서 용어 앞으로 다른 문자 여러 개가 붙어 있는 용어 example.com을 검색합니다.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "index": "default", 5 "wildcard": { 6 "query": "*example.com", 7 "path": "page_updated_by.email", 8 "allowAnalyzedField": true 9 } 10 } 11 }, 12 { 13 "$project": { 14 "_id": 1, 15 "page_updated_by.email": 1 16 } 17 } 18 ])
page_updated_by.email 필드 이메일 주소에 example.com 라는 단어가 포함되어 있지만 MongoDB Search는 쿼리 에 대한 결과를 반환하지 않습니다. MongoDB Search는 사용자 지정 분석기 에 제공된 정규 표현식 에 단어 redacted 와 일치하는 문자열을 토큰화하므로 MongoDB 텀 쿼리 문서 와도 일치시키지 않습니다.
removeDuplicates
removeDuplicates 토큰 필터하다 동일한 위치에 있는 동일한 텀 에 대한 토큰인 연속적인 중복 토큰을 제거합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 사람이 읽을 수 있는 레이블로 이 토큰 필터를 식별합니다. 값은 |
예시
다음 인덱스 정의는 duplicateRemover라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.
토큰에 다음 필터를 적용합니다.
키워드 반복 토큰 필터하다 사용하여 토큰을 키워드와 비키워드로 두 번 생성합니다.
removeDuplicates를 사용하여 스트림 의 이전 토큰과 동일한 위치 및 텀 에 있는 토큰을 필터하다 .
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
removeDuplicates을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 keywordRepeat 을 선택하고 Add token filter 을 클릭합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 removeDuplicates 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
removeDuplicates선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "duplicateRemover", "type": "string" } } }, "analyzers": [ { "name": "duplicateRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] }
db.minutes.createSearchIndex( "default", { "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "duplicateRemover", "type": "string" } } }, "analyzers": [ { "name": "duplicateRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] } )
다음 쿼리 title 연산자를 mee* 사용하여 minutes 컬렉션 의 필드 wildcard 에서 텀 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object title: "The team's weekly meeting" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object title: "The regular board meeting"
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: "The team's weekly meeting" }, { _id: 3, title: 'The regular board meeting' } ]
MongoDB Search는 제목 필드 에 meeting 이라는 텀 포함된 문서를 반환합니다. keywordRepeat 토큰 필터하다 결과의 문서에 대해 다음 토큰을 생성합니다.
제목 | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
removeDuplicates 토큰 필터하다 스트림 에서 중복된 토큰을 제거합니다.
reverse
reverse 토큰 필터는 각 문자열 토큰을 반전시킵니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 사람이 읽을 수 있는 레이블로 이 토큰 필터를 식별합니다. 값은 |
예시
다음 인덱스 정의는 keywordReverse라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.email 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
키워드 토크나이저를 적용하여 전체 문자열을 단일 용어로 토큰화합니다.
reverse토큰 필터를 적용하여 문자열 토큰을 반전시킵니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
reverseAnalyzer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운 메뉴에서 reverse 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
reverseAnalyzer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "keywordReverse", "mappings": { "dynamic": true }, "analyzers": [ { "name": "keywordReverse", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "reverse" } ] } ] }
db.minutes.createSearchIndex("default", { "analyzer": "keywordReverse", "mappings": { "dynamic": true }, "analyzers": [ { "name": "keywordReverse", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "reverse" } ] } ] })
다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 page_updated_by.email 필드를 검색하여 @example.com 문자 앞의 모든 문자를 역순으로 일치시킵니다. reverse 토큰 필터를 사용하면 선행 와일드카드 쿼리의 속도를 높일 수 있습니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "wildcard": { "query": "*@example.com", "path": "page_updated_by.email", "allowAnalyzedField": true } } } SCORE: 1 _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 SCORE: 1 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object last_name: "OHRBACH" first_name: "Noël" email: "ohrbach@example.com" phone: "(123) 456 0987" text: Object SCORE: 1 _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 SCORE: 1 _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
.. io-code-block:: :copyable: true .. input:: :language: json db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "*@example.com", "path": "page_updated_by.email", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "page_updated_by.email": 1, } } ]) .. output:: :language: json [ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } }, { _id: 2, page_updated_by: { email: 'ohrback@example.com' } }, { _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }, { _id: 4, page_updated_by: { email: 'levinski@example.com' } } ]
앞의 쿼리 에 대해 MongoDB Search는 사용자 지정 분석기 와일드카드 쿼리 에 적용하여 다음과 같이 쿼리 변환합니다.
moc.elpmaxe@*
그런 다음 MongoDB Search는 인덱싱된 토큰에 대해 쿼리 실행하며, 이 토큰도 역방향으로 변환됩니다. 구체적으로 MongoDB Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 텀 moc.elpmaxe@*과 일치시킵니다.
정규화 형식 | 출력 토큰 |
|---|---|
|
|
|
|
|
|
|
|
싱글
shingle 토큰 필터는 일련의 토큰에서 싱글(토큰 n-그램)을 구성합니다. 동의어 또는 자동 완성 매핑 정의에는 shingle 토큰 필터를 사용할 수 없습니다.
참고
regex (MongoDB 검색 연산자) 또는 wildcard 연산자로 쿼리하는 경우 입력 토큰당 둘 이상의 출력 토큰을 생성하므로 shingle 토큰 필터를 searchAnalyzer (으)로 사용할 수 없습니다. 인덱스 정의에서 searchAnalyzer (으)로 다른 분석기 지정합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| integer | 네 | 싱글당 최소 토큰 수입니다. |
| integer | 네 | 싱글당 최대 토큰 수입니다. 값은 |
예시
minutes 컬렉션 의 필드 에 대한 다음 인덱스 정의 예시 page_updated_by.email 에서는 두 개의 사용자 지정 분석기emailAutocompleteIndex 및 를 emailAutocompleteSearch 사용하여 자동 완성과 유사한 기능을 구현 . MongoDB Search는 인덱스 생성 중에 emailAutocompleteIndex 분석기 사용하여 다음을 수행합니다.
MongoDB Search는 검색 중에 emailAutocompleteSearch 분석기 사용하여 다음을 수행합니다.
필드에서
@문자를AT로 바꾸기공백 토크나이저를 사용하여 토큰 생성
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
emailAutocompleteIndex을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 mapping을(를) 선택하고 을(를) 클릭하세요.
다음 키와 값을 입력합니다:
키값@AT사용자 지정 분석기에 문자 필터를 추가하려면 Add character filter 을 클릭합니다.
접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운에서 whitespace 을 선택하고 maxTokenLength 필드에
15을 입력합니다.Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 shingle 을 선택하고 다음 필드를 구성합니다.
필드필드 값minShingleSize2
minShingleSize3
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 edgeGram 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다:
필드필드 값minGram2
maxGram15
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
emailAutocompleteSearch을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 mapping을(를) 선택하고 을(를) 클릭하세요.
다음 키와 값을 입력합니다:
키값@AT사용자 지정 분석기에 문자 필터를 추가하려면 Add character filter 을 클릭합니다.
접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운에서 whitespace 을 선택하고 maxTokenLength 필드에
15을 입력합니다.인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 중첩 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 중첩된 page_updated_by.email을 선택하고 Data Type드롭다운에서 문자열을 선택합니다.
데이터 유형에 대한 속성 섹션의 Index Analyzer 드롭다운에서
emailAutocompleteIndex선택하고 Search Analyzer 드롭다운에서emailAutocompleteSearch선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
1 { 2 "analyzer": "lucene.keyword", 3 "mappings": { 4 "dynamic": true, 5 "fields": { 6 "page_updated_by": { 7 "type": "document", 8 "fields": { 9 "email": { 10 "type": "string", 11 "analyzer": "emailAutocompleteIndex", 12 "searchAnalyzer": "emailAutocompleteSearch" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "emailAutocompleteIndex", 21 "charFilters": [ 22 { 23 "mappings": { 24 "@": "AT" 25 }, 26 "type": "mapping" 27 } 28 ], 29 "tokenizer": { 30 "maxTokenLength": 15, 31 "type": "whitespace" 32 }, 33 "tokenFilters": [ 34 { 35 "maxShingleSize": 3, 36 **** "minShingleSize": 2, 37 "type": "shingle" 38 }, 39 { 40 "maxGram": 15, 41 "minGram": 2, 42 "type": "edgeGram" 43 } 44 ] 45 }, 46 { 47 "name": "emailAutocompleteSearch", 48 "charFilters": [ 49 { 50 "mappings": { 51 "@": "AT" 52 }, 53 "type": "mapping" 54 } 55 ], 56 "tokenizer": { 57 "maxTokenLength": 15, 58 "type": "whitespace" 59 } 60 } 61 ] 62 }
db.minutes.createSearchIndex("default", { "analyzer": "lucene.keyword", "mappings": { "dynamic": true, "fields": { "page_updated_by": { "type": "document", "fields": { "email": { "type": "string", "analyzer": "emailAutocompleteIndex", "searchAnalyzer": "emailAutocompleteSearch" } } } } }, "analyzers": [ { "name": "emailAutocompleteIndex", "charFilters": [ { "mappings": { "@": "AT" }, "type": "mapping" } ], "tokenizer": { "maxTokenLength": 15, "type": "whitespace" }, "tokenFilters": [ { "maxShingleSize": 3, "minShingleSize": 2, "type": "shingle" }, { "maxGram": 15, "minGram": 2, "type": "edgeGram" } ] }, { "name": "emailAutocompleteSearch", "charFilters": [ { "mappings": { "@": "AT" }, "type": "mapping" } ], "tokenizer": { "maxTokenLength": 15, "type": "whitespace" } } ] })
다음 쿼리는 minutes 컬렉션의 page_updated_by.email 필드에서 이메일 주소를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "auerbach@ex", "path": "page_updated_by.email" } } } SCORE: 0.8824931383132935 _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
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "auerbach@ex", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "text.es_MX": 1 } } ])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]
MongoDB Search는 emailAutocompleteSearch 분석기 사용하여 검색 토큰을 생성한 다음 emailAutocompleteIndex 분석기 사용하여 생성한 인덱스 토큰과 일치시킵니다. 다음 표는 MongoDB Search에서 생성하는 검색 및 인덱스 토큰(최대 15 자)을 보여줍니다.
토큰 검색 | Index Tokens |
|---|---|
|
|
snowballStemming
The snowballStemming 토큰은 Snowball에서 생성된 어간 처리기를 사용하여 Stems 토큰을 필터링합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 | 네 | 유효한 값은 다음과 같습니다.
|
예시
다음 인덱스 정의는 frenchStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.fr_CA 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 토큰 필터를 적용합니다.
lowercase 토큰 필터를 사용하여 토큰을 소문자로 변환합니다.
french어간 단어에 대한snowballStemming토큰 필터의 변형입니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
frenchStemmer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 snowballStemming 을 선택한 다음 stemmerName 드롭다운에서
french을 선택합니다.사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping 을 클릭하여 text.fr_CA 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 text.fr_CA를 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
frenchStemmer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "text": { "type": "document", "fields": { "fr_CA": { "type": "string", "analyzer": "frenchStemmer" } } } } }, "analyzers": [ { "name": "frenchStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "snowballStemming", "stemmerName": "french" } ] } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "text": { "type": "document", "fields": { "fr_CA": { "type": "string", "analyzer": "frenchStemmer" } } } } }, "analyzers": [ { "name": "frenchStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "snowballStemming", "stemmerName": "french" } ] } ] })
다음 쿼리는 minutes 컬렉션의 text.fr_CA 필드에서 용어 réunion을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "réunion", "path": "text.fr_CA" } } } SCORE: 0.13076457381248474 _id: "1" message: "try to siGn-In" page_updated_by: Object 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"
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "réunion", "path": "text.fr_CA" } } }, { "$project": { "_id": 1, "text.fr_CA": 1 } } ])
[ { _id: 1, text: { fr_CA: 'Cette page traite des réunions de département' } } ]
MongoDB Search는 _id: 1 가 포함된 문서 결과로 반환합니다. MongoDB Search는 문서 에 대해 다음 토큰을 생성한 다음 이를 사용하여 쿼리 텀 réunion과 일치시키기 때문에 쿼리 텀 를 문서 와 일치시킵니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
spanishPluralStemming
spanishPluralStemming 토큰 필터는 스페인어 복수형 단어의 어간을 처리합니다. 소문자 텍스트를 사용합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 spanishPluralStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.es_MX 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 토큰 필터를 적용합니다.
lowercase 토큰 필터를 사용하여 스페인어 용어를 소문자로 변환합니다.
spanishPluralStemming토큰 필터를 사용하여 토큰의 복수형 스페인어 단어를 단수형으로 변환합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
spanishPluralStemmer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 spanishPluralStemming 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.es_MX 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 text.es_MX를 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
spanishPluralStemmer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "analyzer": "spanishPluralStemmer", "mappings": { "fields": { "text: { "type": "document", "fields": { "es_MX": { "analyzer": "spanishPluralStemmer", "searchAnalyzer": "spanishPluralStemmer", "type": "string" } } } } }, "analyzers": [ { "name": "spanishPluralStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "spanishPluralStemming" } ] } ] }
db.minutes.createSearchIndex("default", { "analyzer": "spanishPluralStemmer", "mappings": { "fields": { "text": { "type": "document", "fields": { "es_MX": { "analyzer": "spanishPluralStemmer", "searchAnalyzer": "spanishPluralStemmer", "type": "string" } } } } }, "analyzers": [ { "name": "spanishPluralStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "spanishPluralStemming" } ] } ] })
다음 쿼리는 minutes 컬렉션의 text.es_MX 필드에서 스페인어 용어 punto를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "punto", "path": "text.es_MX" } } } SCORE: 0.13076457381248474 _id: "4" message: "write down your signature or phone №" page_updated_by: Object 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."
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "punto", "path": "text.es_MX" } } }, { "$project": { "_id": 1, "text.es_MX": 1 } } ])
[ { _id: 4, text : { es_MX: 'La página ha sido actualizada con los puntos de la agenda.', } } ]
문서 의 text.es_MX 필드 에 복수형 텀 puntos가 포함되어 있기 때문에 MongoDB Search는 _id: 4 이 포함된 문서 반환합니다. MongoDB Search MongoDB 이 텀 에서 복수형(s)을 어간으로 하여 puntos 를 punto 로 분석하기 때문에 이 문서 쿼리 텀 punto 에 대해 일치시킵니다. 구체적으로 MongoDB Search는 결과에서 문서 에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 이를 쿼리 텀 와 일치시키는 데 사용합니다.
문서 ID | 출력 토큰 |
|
|
stempel
stempel 토큰 필터는 Lucene의 기본 폴란드어 어간 처리 테이블을 사용하여 폴란드어로 된 단어의 어간을 처리합니다. 소문자 텍스트를 사용합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 stempelStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.pl_PL 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.
토큰에 다음 필터를 적용합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
stempelAnalyzer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 standard 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운 메뉴에서 spanishPluralStemming 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
stempelAnalyzer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "stempelAnalyzer" } } }, "analyzers": [ { "name": "stempelAnalyzer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "stempel" } ] } ] }
db.minutes.createSearchIndex("default", { "analyzer": "stempelStemmer", "mappings": { "dynamic": true, "fields": { "text.pl_PL": { "analyzer": "stempelStemmer", "searchAnalyzer": "stempelStemmer", "type": "string" } } }, "analyzers": [ { "name": "stempelStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "stempel" } ] } ] })
다음 쿼리는 minutes 컬렉션의 text.pl_PL 필드에서 폴란드어 용어 punkt를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "punkt", "path": "text.pl_PL" } } } SCORE: 0.5376965999603271 _id: "4" text: Object pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "punkt", "path": "text.pl_PL" } } }, { "$project": { "_id": 1, "text.pl_PL": 1 } } ])
[ { _id: 4, text: { pl_PL: 'Strona została zaktualizowana o punkty porządku obrad.' } } ]
문서 의 text.pl_PL 필드 에 복수형 텀 punkty가 포함되어 있기 때문에 MongoDB Search는 _id: 4 이 포함된 문서 반환합니다. MongoDB Search MongoDB 이 텀 에서 복수형(y)을 어간으로 하여 punkty 를 punkt 로 분석하기 때문에 이 문서 쿼리 텀 punkt 에 대해 일치시킵니다. 구체적으로 MongoDB Search는 결과에서 문서 에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 텀 와 일치시킵니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
중지 단어
stopword 토큰 필터는 지정된 중지 단어에 해당하는 토큰을 제거합니다. 이 토큰 필터는 지정된 중지 단어를 분석하지 않습니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| 문자열 배열 | 네 | 제거할 토큰에 해당하는 중지 단어가 포함된 목록입니다. 값은 하나 이상의 중지 단어여야 합니다. |
| 부울 | no | 제거할 토큰을 필터링할 때 중지 단어의 대소문자를 무시할지 여부를 나타내는 플래그입니다. 값은 다음 중 하나일 수 있습니다.
기본값: |
예시
다음 인덱스 정의는 stopwordRemover라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.
stopword토큰 필터를 적용하여 정의된 중지 단어is,the및at과 일치하는 토큰을 제거합니다. 토큰 필터는 대소문자를 구분하지 않으며 지정된 중지 단어와 일치하는 모든 토큰을 제거합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
stopwordRemover을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 stopword 선택하고 tokens 필드에 다음을 입력합니다.
is,the,at사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 text.en_US을 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
stopwordRemover선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "text": { "type" : "document", "fields": { "en_US": { "type": "string", "analyzer": "stopwordRemover" } } } } }, "analyzers": [ { "name": "stopwordRemover", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "stopword", "tokens": ["is", "the", "at"] } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "text": { 7 "type": "document", 8 "fields": { 9 "en_US": { 10 "type": "string", 11 "analyzer": "stopwordRemover" 12 } 13 } 14 } 15 } 16 }, 17 "analyzers": [ 18 { 19 "name": "stopwordRemover", 20 "charFilters": [], 21 "tokenizer": { 22 "type": "whitespace" 23 }, 24 "tokenFilters": [ 25 { 26 "type": "stopword", 27 "tokens": ["is", "the", "at"] 28 } 29 ] 30 } 31 ] 32 } 33 )
다음 쿼리는 minutes 컬렉션의 text.en_US 필드에서 head of the sales 구문을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "phrase": { "query": "head of the sales", "path": "text.en_US" } } } SCORE: 1.5351942777633667 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "query": "head of the sales", 6 "path": "text.en_US" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.en_US": 1 14 } 15 } 16 ])
[ { _id: 2, text: { en_US: 'The head of the sales department spoke first.' } } ]
en_US 필드 쿼리 텀 포함되어 있기 때문에 MongoDB Search는 _id: 2 이 포함된 문서 를 반환합니다. MongoDB Search는 분석 중에 문서 에서 중지 단어 the 에 대한 토큰을 생성하지 않지만, string 필드의 경우 인덱스 분석기 사용하여 쿼리 텀 분석하기 때문에 여전히 쿼리 텀 와 일치시킬 수 있습니다(또는 다음과 같은 경우). 지정된, searchAnalyzer 사용) MongoDB Search가 쿼리 텀 문서 와 일치시킬 수 있도록 쿼리 텀 에서 중지 단어를 제거합니다. 구체적으로 MongoDB Search는 결과에서 문서 에 대해 다음과 같은 토큰을 생성합니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
트림
trim 토큰 필터는 토큰에서 선행 및 후행 공백을 잘라냅니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
예시
다음 인덱스 정의는 tokenTrimmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.en_US를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
htmlStrip 문자 필터를 적용하여
a태그 외의 모든 HTML 태그를 텍스트에서 제거합니다.키워드 토크나이저를 적용하여 전체 문자열에 대한 단일 토큰을 생성합니다.
trim토큰 필터를 적용하여 토큰의 선행 및 후행 공백을 제거합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
tokenTrimmer을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 htmlStrip 을 선택하고 ignoredTags 필드에
a을 입력합니다.사용자 지정 분석기에 문자 필터를 추가하려면 Add character filter 을 클릭합니다.
접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 keyword 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운 메뉴에서 trim 을(를) 선택합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 text.en_US을 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
tokenTrimmer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "text": { "type": "document", "fields": { "en_US": { "type": "string", "analyzer": "tokenTrimmer" } } } } }, "analyzers": [ { "name": "tokenTrimmer", "charFilters": [{ "type": "htmlStrip", "ignoredTags": ["a"] }], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "trim" } ] } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "text": { "type": "document", "fields": { "en_US": { "type": "string", "analyzer": "tokenTrimmer" } } } } }, "analyzers": [ { "name": "tokenTrimmer", "charFilters": [{ "type": "htmlStrip", "ignoredTags": ["a"] }], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "trim" } ] } ] })
다음 쿼리는 minutes 컬렉션의 text.en_US 필드에서 *department meetings*를 포함하고 그 앞뒤로 다른 문자 여러 개가 포함된 용어를 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "wildcard": { "query": "*department meetings*", "path": "text.en_US", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object 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 "wildcard": { 5 "query": "*department meetings*", 6 "path": "text.en_US", 7 "allowAnalyzedField": true 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "text.en_US": 1 15 } 16 } 17 ])
1 [ 2 { 3 _id: 1, 4 text: { en_US: '<head> This page deals with department meetings. </head>' } 5 } 6 ]
en_US 필드 쿼리 텀 department meetings가 포함되어 있기 때문에 MongoDB Search는 _id: 1 이 포함된 문서 반환합니다. MongoDB Search는 결과에서 문서 에 대해 다음과 같은 토큰을 생성하며, 이는 MongoDB Search가 HTML 태그를 제거하고 전체 문자열에 대해 단일 토큰을 생성했으며 토큰의 선행 및 후행 공백을 제거했음을 보여줍니다.
문서 ID | 출력 토큰 |
|---|---|
|
|
wordDelimiterGraph
wordDelimiterGraph 토큰 필터는 구성된 규칙에 따라 토큰을 하위 토큰으로 분할합니다. 표준 토크나이저는 이 토큰 필터가 경계를 결정하는 데 사용하는 많은 단어 내 구분 기호를 제거하므로 이 토큰 필터를 표준 토크나이저와 함께 사용하지 않는 것이 좋습니다.
참고
regex (MongoDB 검색 연산자) 또는 wildcard 연산자로 쿼리하는 경우 입력 토큰당 둘 이상의 출력 토큰을 생성하므로 wordDelimiterGraph 토큰 필터를 searchAnalyzer (으)로 사용할 수 없습니다. 인덱스 정의에서 searchAnalyzer (으)로 다른 분석기 지정합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
|---|---|---|---|
| 문자열 | 네 | 이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 |
| 객체 | no | 단어를 하위 단어로 분할하는 방법을 결정하는 규칙이 포함된 객체입니다. 기본값: |
delimiterOptions.generateWordParts | 부울 | no | 하위 단어를 기준으로 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.generateNumberParts | 부울 | no | 하위 번호를 기준으로 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.concatenateWords | 부울 | no | 하위 단어의 실행을 연결할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.concatenateNumbers | 부울 | no | 하위 번호의 실행을 연결할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.concatenateAll | 부울 | no | 모든 실행을 연결할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.preserveOriginal | 부울 | no | 원래 단어의 토큰을 생성할지 여부를 나타내는 플래그입니다. 기본값: |
delimiterOptions.splitOnCaseChange | 부울 | no | 대소문자 전환에 따라 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.splitOnNumerics | 부울 | no | 문자-숫자 전환에 따라 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.stemEnglishPossessive | 부울 | no | 각 하위 단어에서 후행 소유격을 제거할지 여부를 나타내는 플래그입니다. 예를 들어 기본값: |
delimiterOptions.ignoreKeywords | 부울 | no |
기본값: |
| 객체 | no | 보호된 단어에 대한 옵션이 포함된 객체입니다. 기본값: |
protectedWords.words | 배열 | 조건부 | 구분되지 않도록 보호할 토큰이 포함된 목록입니다. |
protectedWords.ignoreCase | 부울 | no | 보호된 단어의 대소문자 구분을 무시할지 여부를 나타내는 플래그입니다. 기본값: |
true인 경우, 이 옵션 뒤에 flattenGraph 토큰 필터를 적용하여 토큰 스트림을 인덱싱에 적합하게 만듭니다.
예시
다음 인덱스 정의는 wordDelimiterGraphAnalyzer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.
공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.
다음에 wordDelimiterGraph 토큰 필터를 적용합니다.
is,the,at를 분할하려고 하지 마세요. 제외는 대소문자를 구분합니다. 예를 들어Is및tHe는 제외되지 않습니다.대소문자 변경 시 토큰을 분할하고 영어 알파벳에서 알파벳만 포함된 토큰을 제거합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
wordDelimiterGraphAnalyzer을 입력합니다.접힌 경우 Tokenizer을(를) 펼칩니다.
드롭다운 메뉴에서 whitespace 을(를) 선택합니다.
Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.
드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.
Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.
드롭다운에서 wordDelimiterGraph 을 선택하고 다음 필드를 구성합니다:
delimiterOptions.generateWordParts 을 선택 취소하고 delimiterOptions.splitOnCaseChange 을 선택합니다.
protectedWords.words필드에is,the및at단어를 한 번에 하나씩 입력한 다음 드롭다운에서 선택합니다.protectedWords.ignoreCase을(를) 선택 취소합니다.
사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.
사용자 지정 분석기를 만들려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping 를 클릭하여 제목 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 title를 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
wordDelimiterGraphAnalyzer선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음 예시로 교체합니다.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "wordDelimiterGraphAnalyzer" } } }, "analyzers": [ { "name": "wordDelimiterGraphAnalyzer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "protectedWords": { "words": ["is", "the", "at"], "ignoreCase": false }, "delimiterOptions" : { "generateWordParts" : false, "splitOnCaseChange" : true } } ] } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "title": { "type": "string", "analyzer": "wordDelimiterGraphAnalyzer" } } }, "analyzers": [ { "name": "wordDelimiterGraphAnalyzer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "protectedWords": { "words": ["is", "the", "at"], "ignoreCase": false }, "delimiterOptions" : { "generateWordParts" : false, "splitOnCaseChange" : true } } ] } ] })
다음 쿼리는 minutes 컬렉션의 title 필드에서 용어 App2을 검색합니다.
인덱스 의 Query 버튼을 클릭합니다.
쿼리 편집하려면 Edit Query 을(를) 클릭합니다.
쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.
기본값 쿼리 다음으로 바꾸고 Search을 클릭합니다.
{ "$search": { "index": "default", "text": { "query": "App2", "path": "title" } } } SCORE: 0.5104123950004578 _id: "4" message: "write down your signature or phone №" page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "App2", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]
문서 의 title 필드 에 App2가 포함되어 있기 때문에 MongoDB Search는 _id: 4 이 포함된 문서 를 반환합니다. MongoDB Search는 대소문자 변경 시 토큰을 분할하고 분할 로 생성된 토큰 중 알파벳 문자만 포함된 토큰을 제거합니다. 또한 인덱스 분석기 사용하여(또는 지정된 경우 searchAnalyzer을 사용하여) 쿼리 텀 분석하여 대소문자 변경 시 단어를 분할 하고 2 앞의 문자를 제거 . 구체적으로 MongoDB Search는 protectedWords 및 delimiterOptions 옵션에 대해 _id : 4 를 사용하여 문서 에 대해 다음과 같은 토큰을 생성합니다.
wordDelimiterGraph 옵션 | 출력 토큰 |
|---|---|
|
|
|
|