문자 필터
문자 필터는 텍스트를 한 번에 한 문자씩 검사하고 필터링 작업을 수행합니다. 문자 필터에는 유형 필드가 필요하며, 일부 필터에는 추가 옵션도 필요합니다.
"charFilters": [ { "type": "<filter-type>", "<additional-option>": <value> } ]
Atlas Search는 네 가지 유형의 문자 필터를 지원합니다.
다음 샘플 인덱스 정의 및 쿼리는 minutes
라는 샘플 컬렉션을 사용합니다. Atlas 클러스터의 데이터베이스에 minutes
컬렉션을 추가하면, Atlas UI의 시각적 편집기 또는 JSON 편집기를 사용하여 이 샘플 인덱스를 생성하고 해당 컬렉션에 대해 샘플 쿼리를 실행할 수 있습니다. 이러한 인덱스를 생성하려면 Atlas UI에서 선호하는 구성 방법을 선택한 후 데이터베이스와 컬렉션을 선택하고 이 페이지의 예시에 따라 인덱스를 수정하여 문자 필터를 사용하는 사용자 지정 분석기를 추가하세요.
참고
Atlas UI에서 Visual Editor을(를) 사용하여 사용자 지정 분석기를 추가하는 경우 Atlas UI는 Custom Analyzers 섹션에 분석기에 대한 다음 세부 정보를 표시합니다.
이름 | 사용자 지정 분석기를 식별하는 레이블입니다. |
사용 분야 | 사용자 지정 분석기를 사용하는 필드입니다. 사용자 지정 분석기를 사용하여 필드를 분석하지 않는 경우 값은 없음입니다. |
문자 필터 | 사용자 지정 분석기에 구성된 Atlas Search 문자 필터 . |
토크나이저 | 사용자 지정 분석기에 구성된 Atlas Search 토크나이저. |
토큰 필터 | 사용자 지정 분석기에서 구성된 Atlas Search 토큰 필터입니다. |
작업 | 사용자 지정 분석기에서 수행할 수 있는 작업을 나타내는 클릭 가능한 아이콘입니다.
|
htmlStrip
htmlStrip
문자 필터는 HTML 구성을 제거합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
type | 문자열 | 네 | 이 문자 필터 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 htmlStrip 이어야 합니다. |
ignoredTags | 문자열 배열 | 네 | 필터링에서 제외할 HTML 태그가 포함된 목록입니다. |
예시
다음 인덱스 정의 예제에서는 htmlStrippingAnalyzer
이라는 사용자 지정 분석기를 사용하여 회의록 collection의 text.en_US
필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다:
htmlStrip
문자 필터를 사용하여a
태그를 제외한 텍스트에서 모든 HTML 태그를 제거합니다.표준 토크나이저를 사용하여 유니코드 텍스트 분할 알고리즘의 단어 분리 규칙에 따라 토큰을 생성합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
htmlStrippingAnalyzer
을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 htmlStrip 을 선택하고 ignoredTags 필드에
a
을 입력합니다.Add character filter를 클릭합니다.
Tokenizer 이 접혀 있는 경우 확장하고 드롭다운에서 standard 를 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.
중첩된 text.en_US을 Field Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
htmlStrippingAnalyzer
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
1 { 2 "mappings": { 3 "fields": { 4 "text": { 5 "type": "document", 6 "dynamic": true, 7 "fields": { 8 "en_US": { 9 "analyzer": "htmlStrippingAnalyzer", 10 "type": "string" 11 } 12 } 13 } 14 } 15 }, 16 "analyzers": [{ 17 "name": "htmlStrippingAnalyzer", 18 "charFilters": [{ 19 "type": "htmlStrip", 20 "ignoredTags": ["a"] 21 }], 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [] 26 }] 27 }
다음 쿼리는 head
text.en_US
minutes
collection의 필드에서 문자열의 발생을 찾습니다.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "head", 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." } }, { _id: 3, text: { en_US: "<body>We'll head out to the conference room by noon.</body>" } } ]
문자열 head
이 HTML 태그 <head>
의 일부이기 때문에 Atlas Search는 _id: 1
이 포함된 문서를 반환하지 않습니다. _id: 3
가 있는 문서에 HTML 태그가 포함되어 있지만 문자열 head
가 다른 곳에 있으므로 문서는 일치합니다. 다음 표는 Atlas Search가 htmlStrippingAnalyzer
를 사용하여 회의록 의 _id: 1
, _id: 2
, _id: 3
문서의 text.en_US
필드 값에 대해 생성하는 토큰을 보여줍니다.
문서 ID | 출력 토큰 |
---|---|
_id: 1 | This , page , deals , with , department , meetings |
_id: 2 | The , head , of , the , sales , department , spoke , first |
_id: 3 | We'll , head , out , to , the , conference , room , by , noon |
icuNormalize
문자 필터는 ICU 정규화 도구로 텍스트를 icuNormalize
정규화합니다. 이는 Lucene의 ICUNormalizer2CharFilter를 기반으로 합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
type | 문자열 | 네 | 이 문자 필터 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 icuNormalize 이어야 합니다. |
예시
다음 인덱스 정의 예제에서는 normalizingAnalyzer
이라는 사용자 지정 분석기를 사용하여 회의록 collection의 message
필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다:
icuNormalize
문자 필터를 사용하여message
필드 값의 텍스트를 정규화합니다.공백 토크나이저를 사용하여 단어 사이의 공백 발생을 기반으로 필드의 단어를 토큰화합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
normalizingAnalyzer
을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 icuNormalize 을 선택하고 Add character filter 을 클릭합니다.
Tokenizer 이 접혀 있는 경우 확장하고 드롭다운에서 whitespace 를 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.
Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형에 대한 속성 섹션의 Index Analyzer 및 Search Analyzer 드롭다운에서
normalizingAnalyzer
를 선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
1 { 2 "mappings": { 3 "fields": { 4 "message": { 5 "type": "string", 6 "analyzer": "normalizingAnalyzer" 7 } 8 } 9 }, 10 "analyzers": [ 11 { 12 "name": "normalizingAnalyzer", 13 "charFilters": [ 14 { 15 "type": "icuNormalize" 16 } 17 ], 18 "tokenizer": { 19 "type": "whitespace" 20 }, 21 "tokenFilters": [] 22 } 23 ] 24 }
다음 쿼리는 no
message
minutes
collection의 필드에서 문자열 (숫자)의 발생을 검색합니다.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "no", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1, 14 "title": 1 15 } 16 } 17 ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2', message: 'write down your signature or phone №' } ]
Atlas Search는 icuNormalize
문자 필터를 사용하여 필드의 숫자 기호 №
를 정규화하고 "number"라는 단어의 해당 인쇄상 약어에 대한 토큰 no
를 생성했기 때문에 문서가 포함된 텀 _id: 4
를 쿼리 텀 no
". Atlas Search는 normalizingAnalyzer
을(를) 사용하여 문서 _id: 4
의 message
필드 값에 대해 다음 토큰을 생성합니다.
문서 ID | 출력 토큰 |
---|---|
_id: 4 | write , down , your , signature , or , phone , no |
매핑
mapping
문자 필터는 사용자가 지정한 정규화 매핑을 문자에 적용합니다. Lucene의 MappingCharFilter를 기반으로 합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
type | 문자열 | 네 | 이 문자 필터 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 mapping 이어야 합니다. |
mappings | 객체 | 네 | 쉼표로 구분된 매핑 목록을 포함하는 객체입니다. 매핑은 한 문자 또는 문자 그룹을 <original> : <replacement> 형식으로 다른 문자로 대체해야 함을 나타냅니다. |
예시
다음 인덱스 정의 예제에서는 mappingAnalyzer
이라는 사용자 지정 분석기를 사용하여 회의록 collection의 page_updated_by.phone
필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다:
mapping
문자 필터를 사용하여 전화 필드에서 하이픈(-
), 점(.
), 여는 괄호((
), 닫는 괄호()
) 및 공백 문자를 제거합니다.키워드 토크나이저를 사용하여 전체 입력을 단일 토큰으로 토큰화합니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
mappingAnalyzer
을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 mapping을(를) 선택하고 을(를) 클릭하세요.
Original 필드에 다음 문자를 한 번에 하나씩 입력하고 해당 Replacement 필드는 비워 둡니다.
원본교체-
.
(
)
{SPACE}Add character filter를 클릭합니다.
Tokenizer 이 접혀 있는 경우 확장하고 드롭다운에서 keyword 를 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.phone(중첩) 필드에 사용자 정의 분석기를 적용합니다.
Field Name 드롭다운에서 page_updated_by.phone(중첩)을 선택하고, Data Type 드롭다운에서 String을 선택하세요.
데이터 유형의 속성 섹션에 있는 Index Analyzer 및 Search Analyzer 드롭다운에서
mappingAnalyzer
선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
1 { 2 "mappings": { 3 "fields": { 4 "page_updated_by": { 5 "fields": { 6 "phone": { 7 "analyzer": "mappingAnalyzer", 8 "type": "string" 9 } 10 }, 11 "type": "document" 12 } 13 } 14 }, 15 "analyzers": [ 16 { 17 "name": "mappingAnalyzer", 18 "charFilters": [ 19 { 20 "mappings": { 21 "-": "", 22 ".": "", 23 "(": "", 24 ")": "", 25 " ": "" 26 }, 27 "type": "mapping" 28 } 29 ], 30 "tokenizer": { 31 "type": "keyword" 32 } 33 } 34 ] 35 }
다음 쿼리는 page_updated_by.phone
필드에서 1234567890
문자열을 검색합니다.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "1234567890", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1, 14 "page_updated_by.last_name": 1 15 } 16 } 17 ])
[ { _id: 1, page_updated_by: { last_name: 'AUERBACH', phone: '(123)-456-7890' } } ]
Atlas Search 결과에는 phone
문자열의 숫자가 쿼리 문자열과 일치하는 하나의 문서가 포함되어 있습니다. 전화번호 지역 번호와 숫자 사이의 하이픈 주위에 괄호가 포함되지 않은 경우에도 mapping
문자 필터를 사용하여 이러한 문자를 제거하고 해당 지역에 대한 단일 토큰을 생성했기 때문에 Atlas Search는 문서를 쿼리 문자열과 일치시켰습니다. 필드 값. 구체적으로, Atlas Search는 _id: 1
을(를) 사용하여 문서의 phone
필드에 대해 다음 토큰을 생성합니다.
문서 ID | 출력 토큰 |
---|---|
_id: 1 | 1234567890 |
또한 Atlas Search는 (123)-456-7890
, 123-456-7890
, 123.456.7890
등을 검색할 때 _id: 1
가 있는 문서를 일치시킵니다. 지정된 경우 searchAnalyzer
사용). 다음 표는 Atlas Search가 쿼리 텀에서 하이픈(-
), 점(.
), 여는 괄호((
), 닫는 괄호( )
) 및 공백 문자의 인스턴스를 제거하여 생성하는 토큰을 보여줍니다.
쿼리 용어 | 출력 토큰 |
---|---|
(123)-456-7890 | 1234567890 |
123-456-7890 | 1234567890 |
123.456.7890 | 1234567890 |
페르시아어
persian
문자 필터는 폭 없는 비접합자의 인스턴스를 공백 문자로 대체합니다. 이 문자 필터는 Lucene의 PersianCharFilter를 기반으로 합니다.
속성
다음과 같은 속성이 있습니다.
이름 | 유형 | 필수 사항입니다. | 설명 |
---|---|---|---|
type | 문자열 | 네 | 이 문자 필터 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 persian 이어야 합니다. |
예시
다음 인덱스 정의 예제에서는 persianCharacterIndex
이라는 사용자 지정 분석기를 사용하여 회의록 collection의 text.fa_IR
필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다:
필드 값에서 인쇄되지 않는 문자를 공백 문자로 바꾸려면
persian
문자 필터를 적용합니다.공백 토크나이저를 사용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성할 수 있습니다.
Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.
Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.
Analyzer Name 필드에
persianCharacterIndex
을 입력합니다.Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.
드롭다운에서 persian 을 선택하고 Add character filter 을 클릭합니다.
Tokenizer 이 접혀 있는 경우 확장하고 드롭다운에서 whitespace 를 선택합니다.
인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.
Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.fa_IR (중첩) 필드에 사용자 지정 분석기를 적용합니다.
text.fa_IR (중첩)Field Name 드롭다운에서 선택하고 Data Type 드롭다운에서 문자열을 선택합니다.
데이터 유형에 대한 속성 섹션의 Index Analyzer 및 Search Analyzer 드롭다운에서
persianCharacterIndex
를 선택합니다.Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.
기본 인덱스 정의를 다음으로 교체합니다.
1 { 2 "analyzer": "lucene.standard", 3 "mappings": { 4 "fields": { 5 "text": { 6 "dynamic": true, 7 "fields": { 8 "fa_IR": { 9 "analyzer": "persianCharacterIndex", 10 "type": "string" 11 } 12 }, 13 "type": "document" 14 } 15 } 16 }, 17 "analyzers": [ 18 { 19 "name": "persianCharacterIndex", 20 "charFilters": [ 21 { 22 "type": "persian" 23 } 24 ], 25 "tokenizer": { 26 "type": "whitespace" 27 } 28 } 29 ] 30 }
다음 쿼리는 text.fa_IR
필드에서 صحبت
라는 용어를 검색합니다.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "صحبت", 6 "path": "text.fa_IR" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.fa_IR": 1, 14 "page_updated_by.last_name": 1 15 } 16 } 17 ])
[ { _id: 2, page_updated_by: { last_name: 'OHRBACH' }, text: { fa_IR: 'ابتدا رئیس بخش فروش صحبت کرد' } } ]
Atlas Search에서 텀이 포함된 _id: 2
문서를 반환합니다. Atlas Search는 먼저 너비가 0이 아닌 조인자의 인스턴스를 공백 문자로 바꾼 다음 단어 사이의 공백 발생 여부를 기반으로 필드 값의 각 단어에 대해 개별 토큰을 생성하여 쿼리 용어를 문서와 일치시킵니다. 구체적으로, Atlas Search는 _id: 2
이 있는 문서에 대해 다음 토큰을 생성합니다.
문서 ID | 출력 토큰 |
---|---|
_id: 2 | ابتدا , رئیس , بخش , فروش , صحبت , کرد |