Docs Menu
Docs Home
/
MongoDB Atlas
/ / / / /

토큰 필터

이 페이지의 내용

  • asciiFolding
  • 속성
  • 예시
  • daitchMokotoffSoundex
  • 속성
  • 예시
  • edgeGram
  • 속성
  • 예시
  • englishPossessive
  • 속성
  • 예시
  • flattenGraph
  • 속성
  • 예시
  • icuFolding
  • 속성
  • 예시
  • icuNormalizer
  • 속성
  • 예시
  • kStemming
  • 속성
  • 예시
  • 분량
  • 속성
  • 예시
  • 소문자
  • 속성
  • 예시
  • nGram
  • 속성
  • 예시
  • porterStemming
  • 속성
  • 예시
  • 정규식
  • 속성
  • 예시
  • reverse
  • 속성
  • 예시
  • 싱글
  • 속성
  • 예시
  • snowballStemming
  • 속성
  • 예시
  • spanishPluralStemming
  • 속성
  • 예시
  • stempel
  • 속성
  • 예시
  • 중지 단어
  • 속성
  • 예시
  • 트림
  • 속성
  • 예시
  • wordDelimiterGraph
  • 속성
  • 예시

토큰 필터는 다음과 같은 작업을 수행합니다.

  • 어간 처리: "talking", "talked", "talks"와 같은 관련 단어를 어근인 "talk"로 줄입니다.

  • 편집: 공개 문서에서 민감한 정보를 제거합니다.

토크필터에는 유형 필드가 필요하며, 일부는 추가 옵션도 필요합니다. 다음과 같은 구문을 갖습니다:

"tokenFilters": [
{
"type": "<token-filter-type>",
"<additional-option>": <value>
}
]

다음 샘플 인덱스 정의 및 쿼리는 minutes라는 샘플 컬렉션을 사용합니다. minutes 컬렉션을 Atlas 클러스터의 데이터베이스에 추가하는 경우 Atlas UI의 Atlas Search Visual 또는 JSON Editor에서 다음 샘플 인덱스를 만들고 이 컬렉션에 대해 샘플 쿼리를 실행할 수 있습니다. 이러한 인덱스를 생성하려면 Atlas UI에서 원하는 구성 방법을 선택한 후 데이터베이스와 컬렉션을 선택하고 인덱스를 수정하여 토큰 필터를 사용하는 사용자 지정 분석기를 추가하세요.

참고

Atlas UI에서 Visual Editor을(를) 사용하여 사용자 지정 분석기를 추가하는 경우 Atlas UI는 Custom Analyzers 섹션에 분석기에 대한 다음 세부 정보를 표시합니다.

이름
사용자 지정 분석기를 식별하는 레이블입니다.
사용 분야
사용자 지정 분석기를 사용하는 필드입니다. 사용자 지정 분석기를 사용하여 필드를 분석하지 않는 경우 값은 없음입니다.
문자 필터
사용자 지정 분석기에 구성된 Atlas Search 문자 필터 입니다.
토크나이저
사용자 지정 분석기에 구성된 Atlas Search 토크나이저.
토큰 필터
사용자 지정 분석기에 구성된 Atlas Search 토큰필터입니다.
작업

사용자 지정 분석기에서 수행할 수 있는 작업을 나타내는 클릭 가능한 아이콘입니다.

  • 사용자 지정 분석기를 편집하려면 을(를) 클릭합니다.

  • 사용자 지정 분석기를 삭제하려면 을(를) 클릭합니다.

토큰 필터는 기본 라틴 유니코드 블록 에 없는 알파벳, 숫자 및 기호 유니코드 문자를 변환합니다. 사용 가능한 경우 asciiFolding ASCII 에 해당하는 것으로 변환합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 asciiFolding이어야 합니다.
originalTokens
문자열
no

토큰 필터의 출력에 원래 토큰을 포함할지 또는 생략할지 여부를 지정하는 문자열입니다. 값은 다음 중 하나일 수 있습니다:

  • include - 토큰 필터의 출력에 변환된 토큰과 함께 원본 토큰을 포함합니다. 원본 토큰과 변환된 양식 모두에 대한 쿼리를 지원하려는 경우 이 값을 권장합니다.

  • omit - 원래 토큰을 생략하고 토큰 필터 출력에 변환된 토큰만 포함합니다. 원래 토큰의 변환된 형식에 대해서만 쿼리하려는 경우 이 값을 사용하십시오.

기본값: omit

다음 인덱스 정의는 asciiConverter라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.first_name 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. asciiFolding 토큰 필터를 적용하여 필드 값을 ASCII에 해당하는 값으로 변환합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 asciiConverter을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운 메뉴에서 asciiFolding 을(를) 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping를 클릭하여 _updated_by.first_name필드에 사용자 지정 분석기를 적용합니다.

  11. page_updated_by.first_nameField Name 드롭다운에서 Data Type문자열과 함께 선택하세요.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 asciiConverter 선택합니다.

  13. 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"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 first_name 필드에서 ASCII에 해당하는 이름을 사용하여 이름을 검색합니다.

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'}
}
]

Atlas Search는 결과에 _id: 1이 있는 문서를 반환하는데, 이는 Atlas Search가 문서의 page_updated_by.first_name 필드에 대해 다음 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어 Sian과 일치시키는 데 사용했기 때문입니다.

필드 이름
출력 토큰
page_updated_by.first_name
Sian

daitchMokotoffSoundex 토큰 필터는 Daitch-Mokotoff 사운덱스 기반으로 소리가 동일한 단어에 대한 토큰을 생성합니다. 음성 알고리즘. 이 필터는 각 입력에 대해 여러 인코딩을 생성할 수 있으며, 인코딩된 각 토큰은 6 자리 숫자입니다.

참고

daitchMokotoffSoundex 토큰 필터를 사용하지 마세요.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 daitchMokotoffSoundex이어야 합니다.
originalTokens
문자열
no

토큰 필터의 출력에 원래 토큰을 포함할지 또는 생략할지 여부를 지정하는 문자열입니다. 값은 다음 중 하나일 수 있습니다:

  • include - 토큰 필터의 출력에 인코딩된 토큰과 함께 원본 토큰을 포함합니다. 원본 토큰과 인코딩된 형식 모두에 대한 쿼리를 원하는 경우 이 값을 사용하는 것이 좋습니다.

  • omit - 원본 토큰을 생략하고 인코딩된 토큰만 토큰 필터의 출력에 포함합니다. 원본 토큰의 인코딩된 형식만 쿼리하려면 이 값을 사용하세요.

기본값: include

다음 인덱스 정의는 dmsAnalyzer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.last_name 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. daitchMokotoffSoundex 토큰 필터를 적용하여 같은 소리의 단어에 대해 토큰을 인코딩합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 dmsAnalyzer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 daitchMokotoffSoundex 선택하고 originalTokens 필드에 대해 다음 표에 표시된 값을 선택합니다.

    필드
    originalTokens
    include
  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.last_name에 사용자 지정 분석기를 적용합니다.

  11. page_updated_by.last_nameField Name 드롭다운에서 Data Type문자열과 함께 선택하세요.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 dmsAnalyzer 선택합니다.

  13. 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"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 page_updated_by.last_name 필드에서 AUERBACH와 비슷하게 들리는 용어를 검색합니다.

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자리 숫자(097400097500)를 사용하여 코딩되어 있기 때문에 Atlas Search는 _id: 1_id: 2이 포함된 문서를 반환합니다. 다음 표는 Atlas Search가 결과의 문서에 대해 생성하는 토큰(검색 가능한 용어 및 6자리 인코딩)을 보여줍니다.

문서 ID
출력 토큰
"_id": 1
AUERBACH, 097400, 097500
"_id": 2
OHRBACH, 097400, 097500

edgeGram 토큰 필터는 텍스트 입력의 왼쪽 또는 '가장자리'로부터의 입력을 구성된 크기의 n-그램으로 토큰화합니다.

참고

일반적으로 토큰 필터는 파이프라인과 유사하게 작동하며, 각 입력 토큰은 1개 이하의 출력 토큰을 생성한 다음 후속 토큰에 입력됩니다. 반면 edgeGram 토큰 필터는 단일 입력 토큰에서 여러 출력 토큰을 생성하는 그래프 생성 필터입니다.

동의어자동 완성 필드 유형 매핑 정의는 그래프를 생성하지 않는 토큰 필터와 함께 사용할 때만 작동하므로 동의어 또는 자동 완성 필드 유형 매핑 정의에는 edgeGram 토큰 필터를 사용할 수 없습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 edgeGram이어야 합니다.
minGram
integer
생성되는 n-그램의 최소 길이를 지정하는 숫자입니다. 값은 maxGram 이하여야 합니다.
maxGram
integer
생성되는 n-그램의 최대 길이를 지정하는 숫자입니다. 값은 minGram 이상이어야 합니다.
termNotInBounds
문자열
no

토큰을 minGram보다 짧게 인덱싱할지, maxGram보다 길게 인덱싱할지를 지정하는 문자열입니다. 허용되는 값은 다음과 같습니다.

  • include

  • omit

include를 지정하면 minGram보다 짧거나 maxGram보다 긴 토큰은 그대로 인덱싱됩니다. omit을 지정하면 해당 토큰은 인덱싱되지 않습니다.

기본값: omit

다음 인덱스 정의는 titleAutocomplete라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 필터를 적용합니다.

    • icuFolding 토큰 필터를 사용하여 토큰에 문자 접기를 적용합니다.

    • edgeGram 토큰 필터를 사용하여 왼쪽에서 4~7자 길이의 토큰을 생성합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 titleAutocomplete을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 icuFolding을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운에서 edgeGram 선택하고 필드에 대해 다음 표에 표시된 값을 입력합니다.

    필드
    minGram
    4
    maxGram
    7
  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.

  13. Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 titleAutocomplete 선택합니다.

  15. 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
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 title 필드에서 mee로 시작하고 그 뒤로 다른 문자 여러 개가 이어지는 용어를 검색합니다.

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이라는 용어가 포함되어 있기 때문에 Atlas Search는 _id: 1_id: 3이 포함된 문서를 반환합니다. 구체적으로, Atlas Search는 결과의 문서에 대해 다음과 같은 4~7자 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어 mee*와 일치시킵니다.

문서 ID
출력 토큰
"_id": 1
team, team', team's, week, weekl, weekly, meet, meeti, meetin, meeting
"_id": 3
regu, regul, regula, regular, boar, board, meet, meeti, meetin, meeting

englishPossessive 토큰 필터는 단어에서 소유격(단어 끝의 's)을 제거합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 englishPossessive이어야 합니다.

다음 인덱스 정의는 englishPossessiveStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰(검색어)을 생성합니다.

  2. EnglishPossessive 토큰 필터를 적용하여 토큰에서 소유격(후행 's)을 제거합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 englishPossessiveStemmer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운 메뉴에서 englishPossessive 을(를) 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.

  11. Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 englishPossessiveStemmer 선택합니다.

  13. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "englishPossessiveStemmer"
}
}
},
"analyzers": [
{
"name": "englishPossessiveStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 title 필드에서 용어 team을 검색합니다.

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'
}
]

Atlas Search에서 title 필드에 용어 team이 포함된 문서를 반환합니다. Atlas Search는 분석 중에 title 필드의 team's를 토큰 team으로 변환하기 때문에 _id: 1로 문서를 반환합니다. 구체적으로, Atlas Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어와 일치시킵니다.

문서 ID
출력 토큰
"_id": 1
The, team, weekly, meeting
"_id": 2
The, check, in, with, sales, team

flattenGraph 토큰 필터는 토큰 필터 그래프를 인덱싱에 적합한 평면 형태로 변환합니다. wordDelimiterGraph 토큰 필터를 사용하는 경우, 이 필터를 wordDelimiterGraph 토큰 필터 뒤에 사용하세요.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 flattenGraph이어야 합니다.

다음 인덱스 정의는 wordDelimiterGraphFlatten이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.

  2. 토큰에 다음 필터를 적용합니다.

    • wordDelimiterGraph 토큰 필터를 사용하여 하위 단어를 기준으로 토큰을 분할하고, 원래 단어에 대한 토큰을 생성하며, SIGN_IN 단어가 구분되지 않도록 보호합니다.

    • flattenGraph 토큰 필터를 적용하여 토큰을 단순화된 플랫 형태로 변환합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 wordDelimiterGraphFlatten을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 whitespace 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 wordDelimiterGraph 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다.

    1. 다음 필드를 선택합니다:

      필드
      delimiterOptions.generateWordParts
      true
      delimiterOptions.preserveOriginal
      true
    2. protectedWords.words 필드에 SIGN_IN을 입력합니다.

    3. protectedWords.ignoreCase0}을 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  10. 드롭다운 메뉴에서 flattenGraph 을(를) 선택합니다.

  11. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  12. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  13. Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.

  14. Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.

  15. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 wordDelimiterGraphFlatten 선택합니다.

  16. 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"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 message 필드에서 용어 sign을 검색합니다.

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 가 포함되어 있어도 Atlas Search는 쿼리 용어 sign 에 대한 결과에서 _id: 3 이 포함된 문서를 반환합니다. wordDelimiterGraph 토큰 필터는 토큰 필터 그래프를 생성하고 flattenGraph 토큰 필터는 토큰 필터 그래프를 인덱싱에 적합한 플랫한 형태로 변환합니다. 구체적으로, Atlas Search는 결과에서 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어 sign 과 일치시킵니다.

문서 ID
출력 토큰
_id: 3
try, to, sign-in, sign, in

토큰 필터는 유니코드 icuFolding 기술30 보고서의 문자 접기를 적용합니다. # 악센트 제거, 대소문자 접기, 표준 중복 접기 등 보고서에 자세히 설명된 기타 여러 기능이 있습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 icuFolding이어야 합니다.

다음 인덱스 정의는 diacriticFolder라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.sv_FI 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 키워드 토크나이저를 적용하여 문자열 필드에 있는 모든 용어를 단일 용어로 토큰화합니다.

  2. icuFolding 토큰 필터를 사용하여 악센트 제거, 대소문자 접기, 표준 중복 접기 등과 같은 접기를 적용할 수 있습니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 diacriticFolder을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 keyword 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운 메뉴에서 icuFolding 을(를) 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping 클릭하여 text.sv_FI중첩 필드에 적용합니다.

  11. 중첩된 text.sv_FIField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 diacriticFolder 선택합니다.

  13. 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"
}
]
}
]
}

다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 text.sv_FI 필드에서 avdelning을 포함하고 그 앞뒤로 다른 문자 여러 개가 포함된 용어를 검색합니다.

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' }
}
]

Atlas Search는 _id: 1_id: 2가 있는 문서를 결과에 반환하는데, 반환하는데, 이는 문서에 avdelning이라는 쿼리 용어가 _id: 1이 있는 문서의 경우 용어 뒤에 다른 문자 여러 개가 이어진 형태로 포함되어 있으며 _id: 2가 있는 문서의 경우 용어의 앞뒤로 다른 문자 여러 개가 있는 형태로 포함되어 있기 때문입니다. 구체적으로, Atlas Search는 결과의 문서에 대해 다음과 같은 토큰을 생성한 다음 쿼리 용어 *avdelning*과 일치시킵니다.

문서 ID
출력 토큰
_id: 1
den har sidan behandlar avdelningsmoten
_id: 2
forst talade chefen for forsaljningsavdelningen

토큰 필터는 icuNormalizer 표준 유니코드 정규화 모드를사용하여 토큰을 정규화합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 icuNormalizer이어야 합니다.
normalizationForm
문자열
no

적용할 정규화 형식입니다. 허용되는 값은 다음과 같습니다.

  • nfd (표준 분해)

  • nfc (표준 분해, 표준 구성 순)

  • nfkd (호환성 분해)

  • nfkc (호환성 분해, 표준 구성 순)

지원되는 정규화 형식에 대해 자세히 알아보려면 1.2: 정규화 형식, UTR#15 섹션을 참조하세요.

기본값: nfc

다음 인덱스 정의는 textNormalizer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 공백 토크나이저를 사용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성할 수 있습니다.

  2. icuNormalizer 토큰 필터를 사용하여 호환성 분해로 토큰을 정규화한 다음 표준 구성으로 토큰을 정규화하세요.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 textNormalizer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 whitespace 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 icuNormalizer 을 선택하고 normalizationForm 드롭다운에서 nfkc 을 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.

  11. Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 textNormalizer 선택합니다.

  13. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"analyzer": "textNormalizer",
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "textNormalizer"
}
}
},
"analyzers": [
{
"name": "textNormalizer",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "icuNormalizer",
"normalizationForm": "nfkc"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 message 필드에서 용어 1을 검색합니다.

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.' } ]

Atlas Search는 문서의 message 필드에 원으로 표시된 숫자 이 포함되어 있어도 쿼리 용어 1에 대한 결과에서 _id: 2가 있는 문서를 반환하는데, 이는 icuNormalizer 토큰 필터가 nfkc 정규화 형식을 사용하여 이 문자에 대한 토큰 1을 생성하기 때문입니다. 다음 표는 Atlas Search가 nfkc 정규화 형식을 사용하여 결과에서 문서에 대해 생성하는 토큰(검색 가능한 용어)과 다른 정규화 형식에 대해 생성하는 토큰을 비교하여 보여 줍니다.

정규화 형식
출력 토큰
경기 1
nfd
do, not, forget, to, SIGN-IN., See, , for, details.
X
nfc
do, not, forget, to, SIGN-IN., See, , for, details.
X
nfkd
do, not, forget, to, SIGN-IN., See, 1, for, details.
nfkc
do, not, forget, to, SIGN-IN., See, 1, for, details.

kStemming 토큰 필터는 어간 처리 알고리즘과 내장된 영어 사전을 조합하여 단어의 어간을 처리합니다. 소문자 텍스트를 사용하며 대문자 텍스트는 수정하지 않습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 kStemming이어야 합니다.

다음 인덱스 정의는 kStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.en_US 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 필터를 적용합니다.

    • lowercase 토큰 필터를 사용하여 토큰을 소문자로 변환합니다.

    • kStemming 토큰 필터로, 어간 처리 알고리즘과 내장된 영어 사전의 조합을 사용하여 단어의 어간을 처리합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 kStemmer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운 메뉴에서 kStemming 을(를) 선택합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. 중첩된 text.en_USField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 kStemmer 선택합니다.

  15. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"analyzer": "kStemmer",
"mappings": {
"dynamic": true
},
"analyzers": [
{
"name": "kStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "kStemming"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 text.en_US 필드에서 용어 Meeting을 검색합니다.

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>'
}
}
]

Atlas Search는 소문자로 된 복수형 용어 meetings 를 포함하는 _id: 1 가 있는 문서를 반환합니다. 소문자 토큰 필터는 토큰 텍스트를Atlas Search 소문자로 정규화하고, kStemming 토큰 필터는 문서의 필드에 있는 복수형 Atlas Search meetings 을(를) 단수형 text.en_US 쿼리 용어와 일치시키기 때문에 는 쿼리 용어를 문서와 일치시킵니다. 또한 Atlas Search는 인덱스 분석기를 사용하여(또는 지정된 경우 searchAnalyzer 을 사용하여) 쿼리 용어를 분석합니다. 구체적으로, Atlas Search는 결과에서 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 이를 쿼리 용어와 일치시키는 데 사용합니다.

head, this, page, deal, with, department, meeting, head

length 토큰 필터는 너무 짧거나 너무 긴 토큰을 제거합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 length이어야 합니다.
min
integer
no

토큰의 최소 길이를 지정하는 숫자입니다. 값은 max 이하여야 합니다.

기본값: 0

max
integer
no

토큰의 최대 길이를 지정하는 숫자입니다. 값은 min 이상이어야 합니다.

기본값: 255

다음 인덱스 정의는 longOnly라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.sv_FI 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 사용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 필터를 적용합니다.

    • icuFolding 토큰 필터를 사용하여 문자 접기를 적용합니다.

    • length 토큰화 후 UTF-16 코드 단위가 20개 이상인 토큰만 인덱싱하는 토큰 필터입니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 longOnly을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 icuFolding을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운에서 length 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다:

    필드
    min
    20
  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.sv.FI 중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. Field Name 드롭다운에서 중첩된 text.sv.FI를 선택하고 Field Name Data Type 드롭다운에서 문자열을 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 longOnly 선택합니다.

  15. 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
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 text.sv_FI 필드에서 용어 forsaljningsavdelningen을 검색합니다.

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'
}
}
]

Atlas Search는 _id: 2가 있는 문서를 반환하며, 여기에는 용어 försäljningsavdelningen이 포함되어 있습니다. 용어가 20자를 초과하기 때문에 Atlas Search는 문서를 쿼리 용어와 일치시킵니다. 또한 쿼리 용어 forsaljningsavdelningen에 분음 부호 문자가 포함되어 있지 않지만 Atlas Search는 문서의 원래 용어에 있는 분음 부호를 접어서 쿼리 용어를 문서와 일치시킵니다. 구체적으로, Atlas Search는 _id: 2가 있는 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성합니다.

forsaljningsavdelningen

컬렉션의 text.sv_FI 필드에 있는 다른 모든 용어가 20자 미만이므로 Atlas Search는 컬렉션의 다른 용어에 대한 검색 결과를 반환하지 않습니다.

lowercase 토큰 필터는 토큰 텍스트를 소문자로 정규화합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 lowercase이어야 합니다.

다음 인덱스 정의 예시에서는 회의록 collection의 title 필드를 nGram 토큰화 전략을 사용하여 자동 완성 유형으로 인덱싱합니다. title필드에 keywordLowerer이라는 사용자 지정 분석기를 적용합니다. 사용자 지정 분석기는 다음을 지정합니다:

  1. 키워드 토크나이저를 적용하여 문자열 또는 문자열 배열에 대한 단일 토큰을 생성합니다.

  2. lowercase토큰 필터를 적용하여 토큰 텍스트를 소문자로 변환합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 keywordLowerer을 입력합니다.

  4. Tokenizer이 접혀 있으면 펼친 다음 드롭다운에서 keyword을 선택합니다.

  5. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  6. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  7. Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.

  8. Field Name드롭다운에서 제목을 선택하고 Data Type드롭다운에서 자동 완성을 선택합니다.

  9. 데이터 유형의 속성 섹션에 있는 속성 드롭다운에서 다음 값을 선택합니다.

    속성 이름
    Analyzer

    keywordLowerer

    Tokenization

    nGram

  10. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음으로 교체합니다.

{
"mappings": {
"fields": {
"title": {
"analyzer": "keywordLowerer",
"tokenization": "nGram",
"type": "autocomplete"
}
}
},
"analyzers": [
{
"name": "keywordLowerer",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "lowercase"
}
]
}
]
}

다음 쿼리는 자동 완성 연산자를 사용하여 title 필드에서 문자 standup을 검색합니다.

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' } ]

Atlas Search는 문서에 쿼리 용어 standup가 포함되어 있으므로 결과에 _id: 4이 포함된 문서를 반환합니다. Atlas Search는 자동 완성 유형에 대해 keyword 토크나이저, lowercase 토큰 필터 및 nGram 토큰화 전략을 사용하여 title 필드에 대한 토큰을 생성합니다. 구체적으로, Atlas Search는 keyword 토크나이저를 사용하여 전체 문자열을 단일 토큰으로 토큰화합니다. 이 토큰은 전체 문자열에서 정확히 일치하는 항목만 지원합니다. 그런 다음 lowercase 토큰 필터를 사용하여 토큰을 소문자로 변환합니다. 결과의 문서에 대해 Atlas Search는 사용자 지정 분석기를 사용하여 다음 토큰을 생성합니다.

문서 ID
출력 토큰
_id: 4
the daily huddle on the standupapp2

사용자 지정 분석기를 적용한 후 Atlas Search는 인덱스 정의에 지정된 대로 title 필드를 자동 완성 유형으로 인덱싱하기 때문에 n-그램의 토큰을 추가로 생성합니다. Atlas Search는 standup을 위한 토큰이 포함된 n-gram 토큰을 사용하여 문서를 standup 쿼리 용어와 일치시킵니다.

다음 인덱스 정의는 lowerCaser라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 분리 규칙에 따라 토큰을 생성합니다.

  2. 토큰에 다음 필터를 적용합니다.

    • icuNormalizer는 표준 유니코드 정규화 모드를 사용하여 토큰을 정규화합니다.

    • lowercase 토큰 텍스트를 소문자로 변환하는 토큰 필터.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 lowerCaser을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 icuNormalizer 을 선택한 다음 normalizationForm 드롭다운에서 nfkd 을 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  10. 드롭다운 메뉴에서 lowercase 을(를) 선택합니다.

  11. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  12. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  13. Field Mappings 섹션에서 Add Field Mapping을 클릭해 메시지 필드에 사용자 지정 분석기를 적용합니다.

  14. Field Name 드롭다운에서 메시지를 선택한 다음 Data Type 드롭다운에서 문자열을 선택합니다.

  15. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 lowerCaser 선택합니다.

  16. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

{
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "lowerCaser"
}
}
},
"analyzers": [
{
"name": "lowerCaser",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuNormalizer",
"normalizationForm": "nfkd"
},
{
"type": "lowercase"
}
]
}
]
}

다음 쿼리는 message 필드에서 sign-in라는 용어를 검색합니다.

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.' }
]

Atlas Search는 쿼리 용어 sign-in 에 대한 결과에서 _id: 1, _id: 3, _id: 2가 포함된 문서를 반환합니다. 이는 icuNormalizer 토크나이저가 먼저 하이픈으로 연결된 단어를 포함한 텍스트를 분할하여 별도의 토큰을 생성하지만 문서의 원래 대소문자를 유지하고, 이후에 lowercase 토큰 필터가 토큰을 소문자로 변환하기 때문입니다. 또한 Atlas Search는 인덱스 분석기(또는 지정된 경우 searchAnalyzer사용)로 쿼리 용어를 분석하여 쿼리 용어를 분할하고 문서와 일치시킵니다.

정규화 형식
출력 토큰
_id: 1
try, to, sign, in
_id: 3
try, to, sign, in
_id: 2
do, not, forget, to, sign, in, see, for, details

nGram 토큰 필터는 입력을 구성된 크기의 n-그램으로 토큰화합니다. 동의어 또는 자동 완성 매핑 정의에는 nGram 토큰 필터를 사용할 수 없습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 nGram이어야 합니다.
minGram
integer
생성되는 n-그램의 최소 길이를 지정하는 숫자입니다. 값은 maxGram 이하여야 합니다.
maxGram
integer
생성되는 n-그램의 최대 길이를 지정하는 숫자입니다. 값은 minGram 이상이어야 합니다.
termNotInBounds
문자열
no

토큰을 minGram보다 짧게 인덱싱할지, maxGram보다 길게 인덱싱할지를 지정하는 문자열입니다. 허용되는 값은 다음과 같습니다.

  • include

  • omit

include를 지정하면 minGram보다 짧거나 maxGram보다 긴 토큰은 그대로 인덱싱됩니다. omit을 지정하면 해당 토큰은 인덱싱되지 않습니다.

기본값: omit

다음 인덱스 정의는 titleAutocomplete이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기 함수는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성합니다.

  2. 토큰에 일련의 토큰 필터를 적용합니다.

    • englishPossessive 을(를) 사용하여 단어에서 소유격(단어 끝의 's)을 제거합니다.

    • nGram 을(를) 사용하여 단어를 4~7자 길이로 토큰화합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 titleAutocomplete을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 englishPossessive을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운에서 nGram 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다:

    필드
    minGram
    4
    maxGram
    7
  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.

  13. Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 titleAutocomplete 선택합니다.

  15. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "titleAutocomplete"
}
}
},
"analyzers": [
{
"name": "titleAutocomplete",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
},
{
"type": "nGram",
"minGram": 4,
"maxGram": 7
}
]
}
]
}

다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 title 필드에서 용어 meet과 해당 용어 뒤로 다른 문자 여러 개가 이어지는 용어를 모두 검색합니다.

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' }
]

Atlas Search는 문서가 meeting이라는 용어를 포함하고 있기 때문에 _id: 1_id: 3이 있는 문서를 반환합니다. 이 용어는 Atlas Search가 쿼리 기준 meet*과 일치시키며, 다음과 같은 토큰들(검색 가능한 용어들)을 생성함으로써 매치됩니다

정규화 형식
출력 토큰
_id: 2
team, week, weekl, weekly, eekl, eekly, ekly, meet, meeti, meetin, meeting, eeti, eeti, eeting, etin, eting, ting
_id: 3
regu, regul, regula, regular, egul, egula, egular, gula, gular, ular, boar, board, oard, meet, meeti, meetin, meeting, eeti, eeti, eeting, etin, eting, ting

참고

termNotInBounds 매개 변수는 기본적으로 omit로 설정되어 있기 때문에 4자 미만(예: the) 및 7자 이상의 용어에 대한 토큰은 Atlas Search에서 생성되지 않습니다. termNotInBounds 매개 변수 값을 include로 설정하면 Atlas Search는 the라는 용어에 대한 토큰도 생성합니다.

porterStemming 토큰 필터는 포터 어간 처리 알고리즘을 사용하여 영어 단어에서 일반적인 어간 및 굴절 접미사를 제거합니다. 소문자 텍스트가 처리되며 대문자 텍스트는 처리되지 않습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 porterStemming이어야 합니다.

다음 인덱스 정의는 porterStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 토큰 필터를 적용합니다.

    • lowercase 토큰 필터: 단어를 소문자로 변환합니다.

    • porterStemming 토큰 필터: 단어에서 일반적인 형태소 및 굴절 접미사를 제거합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 porterStemmer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운 메뉴에서 porterStemming 을(를) 선택합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭해 제목 필드에 사용자 지정 분석기를 적용합니다.

  13. Field Name 드롭다운에서 title(제목)을, Data Type 드롭다운에서 String(문자열)을 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 porterStemmer 선택합니다.

  15. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "porterStemmer"
}
}
},
"analyzers": [
{
"name": "porterStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "porterStemming"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 title 필드에서 용어 Meet을 검색합니다.

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 형태소 접미사를 제거하여 토큰을 생성하기 때문에 Atlas Search는 및 이 포함된 문서를 meeting meet 반환합니다. Atlas Search는 쿼리 Meet 용어 과 일치합니다. 구체적으로, Atlas Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어 Meet 와 일치시킵니다.

정규화 형식
출력 토큰
_id: 1
the, team', weekli, meet
_id: 3
the, regular, board, meet

regex 토큰 필터는 각 토큰에 정규 표현식을 적용하여 일치하는 항목을 지정된 문자열로 바꿉니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
사람이 읽을 수 있는 레이블로 이 토큰 필터를 식별합니다. 값은 regex이어야 합니다.
pattern
문자열
각 토큰에 적용할 표현식 패턴입니다.
replacement
문자열

일치하는 패턴이 발생할 때마다 대체할 대체 문자열입니다.

토큰을 무시하거나 삭제하기 위해 빈 string ("")을 지정하면 Atlas Search 는 대신 빈 string 이 포함된 토큰을 생성합니다. 빈 문자열이 있는 토큰을 삭제하려면 regex 토큰 필터 뒤에 stopword 토큰 필터를 사용합니다. 예를 들면 다음과 같습니다.

"analyzers": [
{
"name": "custom.analyzer.name",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"matches": "all",
"pattern": "^(?!\\$)\\w+",
"replacement": "",
"type": "regex"
},
{
"type": "stopword",
"tokens": [""]
}
]
}
]
matches
문자열

허용되는 값은 다음과 같습니다.

  • all

  • first

matchesall로 설정된 경우 일치하는 모든 패턴을 바꿉니다. 그렇지 않으면 첫 번째 일치하는 패턴만 바꿉니다.

다음 인덱스 정의는 emailRedact라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.email 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 키워드 토크나이저를 적용하여 필드 값의 모든 단어를 단일 용어로 인덱싱합니다.

  2. 토큰에 다음 토큰 필터를 적용합니다.

    • lowercase 토큰 필터를 사용하여 토큰의 대문자를 소문자로 바꿀 수 있습니다.

    • regex 토큰 필터를 사용하여 토큰에서 이메일 주소처럼 보이는 문자열을 찾아 redacted라는 단어로 바꿉니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 emailRedact을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 keyword 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운에서 regex 선택하고 토큰 필터에 대해 다음을 구성합니다.

    1. pattern 필드에 ^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$을 입력합니다.

    2. replacement 필드에 redacted을 입력합니다.

    3. matches 드롭다운 메뉴에서 all을(를) 선택합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. Field Name 드롭다운에서 중첩된 page_updated_by.email을 선택하고 Data Type드롭다운에서 문자열을 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 emailRedact 선택합니다.

  15. 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"
}
]
}
]
}

다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 page_updated_by.email 필드에서 용어 앞으로 다른 문자 여러 개가 붙어 있는 용어 example.com을 검색합니다.

1db.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이라는 단어가 포함되어 있더라도 Atlas Search는 쿼리에 대한 결과를 반환하지 않습니다. Atlas Search는 사용자 지정 분석기에 제공된 정규 표현식에 단어 redacted와 일치하는 문자열을 토큰화하므로 쿼리 용어를 어떤 문서와도 일치시키지 않습니다.

reverse 토큰 필터는 각 문자열 토큰을 반전시킵니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
사람이 읽을 수 있는 레이블로 이 토큰 필터를 식별합니다. 값은 reverse이어야 합니다.

다음 인덱스 정의는 keywordReverse라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.email 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  • 키워드 토크나이저를 적용하여 전체 문자열을 단일 용어로 토큰화합니다.

  • reverse 토큰 필터를 적용하여 문자열 토큰을 반전시킵니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 keywordReverse을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 keyword 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운 메뉴에서 reverse 을(를) 선택합니다.

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 중첩 필드에 사용자 지정 분석기를 적용합니다.

  11. Field Name 드롭다운에서 중첩된 page_updated_by.email을 선택하고 Data Type드롭다운에서 문자열을 선택합니다.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 keywordReverse 선택합니다.

  13. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"analyzer": "lucene.keyword",
"mappings": {
"dynamic":
},
"analyzers": [
{
"name": "keywordReverse",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "reverse"
}
]
}
]
}

다음 쿼리는 와일드카드 연산자를 사용하여 minutes 컬렉션의 page_updated_by.email 필드를 검색하여 @example.com 문자 앞의 모든 문자를 역순으로 일치시킵니다. reverse 토큰 필터를 사용하면 선행 와일드카드 쿼리의 속도를 높일 수 있습니다.

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,
}
}
])

선행 쿼리의 경우, Atlas Search는 와일드카드 쿼리에 사용자 지정 분석기를 적용하여 다음과 같이 쿼리를 변환합니다.

moc.elpmaxe@*

그런 다음 Atlas Search는 인덱싱된 토큰에 대해 쿼리를 실행하며, 이 토큰도 역방향으로 변환됩니다. 이 쿼리는 다음 문서를 반환합니다.

[
{ _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' } }
]

구체적으로, Atlas Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어 moc.elpmaxe@*과 일치시킵니다.

정규화 형식
출력 토큰
_id: 1
moc.elpmaxe@hcabreua
_id: 2
moc.elpmaxe@kcabrho
_id: 3
moc.elpmaxe@yksniwel
_id: 4
moc.elpmaxe@iksnivel

shingle 토큰 필터는 일련의 토큰에서 싱글(토큰 n-그램)을 구성합니다. 동의어 또는 자동 완성 매핑 정의에는 shingle 토큰 필터를 사용할 수 없습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 shingle이어야 합니다.
minShingleSize
integer
싱글당 최소 토큰 수입니다. 2 보다 크거나 같고 maxShingleSize보다 작거나 같아야 합니다.
maxShingleSize
integer
싱글당 최대 토큰 수입니다. 값은 minShingleSize 이상이어야 합니다.

minutes 컬렉션의 page_updated_by.email 필드에 대한 다음 인덱스 정의 예시에서는 두 개의 사용자 지정 분석기 emailAutocompleteIndexemailAutocompleteSearch를 사용하여 자동 완성과 유사한 기능을 구현합니다. Atlas Search는 인덱스 생성 중에 emailAutocompleteIndex 분석기를 사용하여 다음을 수행합니다.

  • 필드에서 @ 문자를 AT로 바꾸기

  • 공백 토크나이저를 사용하여 토큰 생성

  • shingle 토큰

  • 해당 싱글 토큰의 edgeGram 생성

Atlas Search는 검색 중에 emailAutocompleteSearch 분석기를 사용하여 다음을 수행합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 emailAutocompleteIndex을 입력합니다.

  4. Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.

  5. 드롭다운에서 mapping을(를) 선택하고 을(를) 클릭하세요.

  6. 다음 키와 값을 입력합니다:

    @
    AT
  7. 사용자 지정 분석기에 문자 필터를 추가하려면 Add character filter 을 클릭합니다.

  8. 접힌 경우 Tokenizer을(를) 펼칩니다.

  9. 드롭다운에서 whitespace 을 선택하고 maxTokenLength 필드에 15 을 입력합니다.

  10. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  11. 드롭다운에서 shingle 을 선택하고 다음 필드를 구성합니다.

    필드
    필드 값
    minShingleSize
    2
    minShingleSize
    3
  12. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  13. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  14. 드롭다운에서 edgeGram 을 선택하고 토큰 필터에 대해 다음 필드를 구성합니다:

    필드
    필드 값
    minGram
    2
    maxGram
    15
  15. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  16. 인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.

  17. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  18. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  19. Analyzer Name 필드에 emailAutocompleteSearch을 입력합니다.

  20. Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.

  21. 드롭다운에서 mapping을(를) 선택하고 을(를) 클릭하세요.

  22. 다음 키와 값을 입력합니다:

    @
    AT
  23. 사용자 지정 분석기에 문자 필터를 추가하려면 Add character filter 을 클릭합니다.

  24. 접힌 경우 Tokenizer을(를) 펼칩니다.

  25. 드롭다운에서 whitespace 을 선택하고 maxTokenLength 필드에 15 을 입력합니다.

  26. 인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.

  27. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 page_updated_by.email 중첩 필드에 사용자 지정 분석기를 적용합니다.

  28. Field Name 드롭다운에서 중첩된 page_updated_by.email을 선택하고 Data Type드롭다운에서 문자열을 선택합니다.

  29. 데이터 유형에 대한 속성 섹션의 Index Analyzer 드롭다운에서 emailAutocompleteIndex 선택하고 Search Analyzer 드롭다운에서 emailAutocompleteSearch 선택합니다.

  30. 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}

다음 쿼리는 minutes 컬렉션의 page_updated_by.email 필드에서 이메일 주소를 검색합니다.

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "auerbach@ex",
"path": "page_updated_by.email"
}
}
},
{
"$project": {
"_id": 1,
"page_updated_by.email": 1
}
}
])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]

Atlas Search는 emailAutocompleteSearch 분석기를 사용하여 검색 토큰을 생성한 다음 emailAutocompleteIndex 분석기를 사용하여 생성한 인덱스 토큰과 일치시킵니다. 다음 표는 Atlas Search에서 생성하는 검색 및 인덱스 토큰(최대 15자)을 보여줍니다.

토큰 검색
Index Tokens
auerbachATexamp
au, aue, auer, auerb, auerba, auerbac, auerbach, auerbachA, auerbachAT, auerbachATe, auerbachATex, auerbachATexa, auerbachATexam, auerbachATexamp

snowballStemming 토큰은 Snowball에서 생성된 어간 처리기를 사용하여 Stems 토큰을 필터링합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 snowballStemming이어야 합니다.
stemmerName
문자열

유효한 값은 다음과 같습니다.

  • arabic

  • armenian

  • basque

  • catalan

  • danish

  • dutch

  • english

  • estonian

  • finnish

  • french

  • german

  • german2 (독일어 대체 어간 처리기. 대부분의 문맥에서 ü를 ue로 확장하여 움라우트를 처리합니다.)

  • hungarian

  • irish

  • italian

  • kp (크레이즈-폴만(Kraaij-Pohlmann) 어간 처리기. 네덜란드어를 대체할 수 있습니다).

  • lithuanian

  • lovins (최초로 공개된 'Lovins JB' 어간 처리 알고리즘).

  • norwegian

  • porter (최초의 포터 영어 어간 처리 알고리즘.)

  • portuguese

  • romanian

  • russian

  • spanish

  • swedish

  • turkish

다음 인덱스 정의는 frenchStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.fr_CA 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 토큰 필터를 적용합니다.

    • lowercase 토큰 필터를 사용하여 토큰을 소문자로 변환합니다.

    • french 어간 단어에 대한 snowballStemming 토큰 필터의 변형입니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 frenchStemmer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운에서 snowballStemming 을 선택한 다음 stemmerName 드롭다운에서 french 을 선택합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping 을 클릭하여 text.fr_CA 중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. 중첩된 text.fr_CAField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 frenchStemmer 선택합니다.

  15. 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"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 text.fr_CA 필드에서 용어 réunion을 검색합니다.

db.minutes.aggregate([
{
"$search": {
"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' }
}
]

Atlas Search는 _id: 1이 포함된 문서를 결과로 반환합니다. Atlas Search는 문서에 대해 다음 토큰을 생성한 다음 이를 사용하여 쿼리 용어 réunion과 일치시키기 때문에 쿼리 용어를 문서와 일치시킵니다.

문서 ID
출력 토큰
_id: 1
cet, pag, trait, de, réunion, de, départ

spanishPluralStemming 토큰 필터는 스페인어 복수형 단어의 어간을 처리합니다. 소문자 텍스트를 사용합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 spanishPluralStemming이어야 합니다.

다음 인덱스 정의는 spanishPluralStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.es_MX 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 토큰 필터를 적용합니다.

    • lowercase 토큰 필터를 사용하여 스페인어 용어를 소문자로 변환합니다.

    • spanishPluralStemming 토큰 필터를 사용하여 토큰의 복수형 스페인어 단어를 단수형으로 변환합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 spanishPluralStemmer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운 메뉴에서 spanishPluralStemming 을(를) 선택합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.es_MX 중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. 중첩된 text.es_MXField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 spanishPluralStemmer 선택합니다.

  15. 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"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 text.es_MX 필드에서 스페인어 용어 punto를 검색합니다.

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가 포함되어 있기 때문에 Atlas Search는 _id: 4가 포함된 문서를 반환합니다. Atlas Search는 이 용어에서 복수형(s)을 어간으로 하여 puntospunto로 분석하므로 이 문서를 쿼리 용어 punto에 대해 일치시킵니다. 구체적으로, Atlas Search는 결과에서 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 이를 쿼리 용어와 일치시키는 데 사용합니다.

문서 ID
출력 토큰
_id: 4
la, pagina, ha, sido, actualizada, con, los, punto, de, la, agenda

stempel 토큰 필터는 Lucene의 기본 폴란드어 어간 처리 테이블을 사용하여 폴란드어로 된 단어의 어간을 처리합니다. 소문자 텍스트를 사용합니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 stempel이어야 합니다.

다음 인덱스 정의는 stempelStemmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.pl_PL 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 표준 토크나이저를 적용하여 단어 나누기 규칙에 따라 토큰을 생성하세요.

  2. 토큰에 다음 필터를 적용합니다.

    • lowercase 토큰 필터: 단어를 소문자로 변환합니다.

    • stempel 토큰 필터를 사용하여 폴란드어 단어의 어간을 처리합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 stempelStemmer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 standard 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운 메뉴에서 stempel 을(를) 선택합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping를 클릭하여 Text.pl_pl중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. 중첩된 text.pl_PLField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 stempelStemmer 선택합니다.

  15. Add을(를) 클릭한 다음 Save Changes을(를) 클릭합니다.

기본 인덱스 정의를 다음 예시로 교체합니다.

{
"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를 검색합니다.

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가 포함되어 있기 때문에 Atlas Search는 _id: 4가 포함된 문서를 반환합니다. Atlas Search는 이 용어에서 복수형(y)을 어간으로 하여 punktypunkt로 분석하므로 이 문서를 쿼리 용어 punkt에 대해 일치시킵니다. 구체적으로, Atlas Search는 결과의 문서에 대해 다음과 같은 토큰(검색 가능한 용어)을 생성한 다음 쿼리 용어와 일치시킵니다.

문서 ID
출력 토큰
_id: 4
strona, zostać, zaktualizować, o, punkt, porządek, obrada

stopword 토큰 필터는 지정된 중지 단어에 해당하는 토큰을 제거합니다. 이 토큰 필터는 지정된 중지 단어를 분석하지 않습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 stopword이어야 합니다.
tokens
문자열 배열
제거할 토큰에 해당하는 중지 단어가 포함된 목록입니다. 값은 하나 이상의 중지 단어여야 합니다.
ignoreCase
부울
no

제거할 토큰을 필터링할 때 중지 단어의 대소문자를 무시할지 여부를 나타내는 플래그입니다. 값은 다음 중 하나일 수 있습니다.

  • true - 대소문자를 무시하고 지정된 중지 단어와 일치하는 모든 토큰을 제거합니다.

  • false - 대소문자를 구분하고 지정된 대소문자와 정확히 일치하는 토큰만 제거합니다.

기본값: true

다음 인덱스 정의는 stopwordRemover라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.

  2. stopword 토큰 필터를 적용하여 정의된 중지 단어 is, theat과 일치하는 토큰을 제거합니다. 토큰 필터는 대소문자를 구분하지 않으며 지정된 중지 단어와 일치하는 모든 토큰을 제거합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 stopwordRemover을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 whitespace 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 stopword 선택하고 tokens 필드에 다음을 입력합니다.

    is, the, at

  8. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  9. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  10. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.

  11. 중첩된 text.en_USField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  12. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 stopwordRemover 선택합니다.

  13. 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"]
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 text.en_US 필드에서 head of the sales 구문을 검색합니다.

1db.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])
1[
2 {
3 _id: 2,
4 text: { en_US: 'The head of the sales department spoke first.' }
5 }
6]

Atlas Search는 en_US 필드에 검색어가 포함되어 있기 때문에 _id: 2 가 포함된 문서를 반환합니다. Atlas Search는 분석 중에 문서에서 the 라는 단어에 대한 토큰을 생성하지 않지만, string 필드의 경우 인덱스 분석기를 사용하여(또는 지정된 경우 searchAnalyzer를 사용하여) 쿼리 용어를 분석하고 쿼리 용어에서 중지 단어를 제거하기 때문에 여전히 쿼리 용어와 일치시킬 수 있으며, 이를 통해 문서에 쿼리 용어를 일치시킬 수 있습니다. 구체적으로, Atlas Search는 결과에서 문서에 대해 다음과 같은 토큰을 생성합니다.

문서 ID
출력 토큰
_id: 2
head, of, sales, department, spoke, first.

trim 토큰 필터는 토큰에서 선행 및 후행 공백을 잘라냅니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 trim이어야 합니다.

다음 인덱스 정의는 tokenTrimmer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 text.en_US를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  • htmlStrip 문자 필터를 적용하여 a 태그 외의 모든 HTML 태그를 텍스트에서 제거합니다.

  • 키워드 토크나이저를 적용하여 전체 문자열에 대한 단일 토큰을 생성합니다.

  • trim 토큰 필터를 적용하여 토큰의 선행 및 후행 공백을 제거합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 tokenTrimmer을 입력합니다.

  4. Character Filters을(를) 확장하고 Add character filter을(를) 클릭합니다.

  5. 드롭다운에서 htmlStrip 을 선택하고 ignoredTags 필드에 a 을 입력합니다.

  6. 사용자 지정 분석기에 문자 필터를 추가하려면 Add character filter 을 클릭합니다.

  7. 접힌 경우 Tokenizer을(를) 펼칩니다.

  8. 드롭다운 메뉴에서 keyword 을(를) 선택합니다.

  9. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  10. 드롭다운 메뉴에서 trim 을(를) 선택합니다.

  11. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  12. 인덱스에 사용자 지정 분석기를 추가하려면 Add 을 클릭합니다.

  13. Field Mappings 섹션에서 Add Field Mapping을 클릭하여 text.en_US 중첩 필드에 사용자 지정 분석기를 적용합니다.

  14. 중첩된 text.en_USField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  15. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 tokenTrimmer 선택합니다.

  16. 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"
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 text.en_US 필드에서 *department meetings*를 포함하고 그 앞뒤로 다른 문자 여러 개가 포함된 용어를 검색합니다.

1db.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]

Atlas Search는 en_US 필드에 쿼리 용어 department meetings가 포함되어 있기 때문에 _id: 1 이 포함된 문서를 반환합니다. 결과에서 문서에 대해 다음과 같은 토큰이 생성되며, 이는 Atlas Search가 HTML 태그를 제거하고 전체 문자열에 대해 단일 토큰을 생성했으며 토큰의 선행 및 후행 공백을 제거했음을 보여줍니다.

문서 ID
출력 토큰
_id: 1
This page deals with department meetings.

wordDelimiterGraph 토큰 필터는 구성된 규칙에 따라 토큰을 하위 토큰으로 분할합니다. 표준 토크나이저는 이 토큰 필터가 경계를 결정하는 데 사용하는 많은 단어 내 구분 기호를 제거하므로 이 토큰 필터를 표준 토크나이저와 함께 사용하지 않는 것이 좋습니다.

다음과 같은 속성이 있습니다.

이름
유형
필수 사항입니다.
설명
type
문자열
이 토큰 필터 유형을 식별하는, 사람이 읽을 수 있는 레이블입니다. 값은 wordDelimiterGraph이어야 합니다.
delimiterOptions
객체
no

단어를 하위 단어로 분할하는 방법을 결정하는 규칙이 포함된 객체입니다.

기본값: {}

delimiterOptions
.generateWordParts
부울
no

하위 단어를 기준으로 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 PowerShotPowerShot으로 분할합니다.

기본값: true

delimiterOptions
.generateNumberParts
부울
no

하위 번호를 기준으로 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 100-21002로 분할합니다.

기본값: true

delimiterOptions
.concatenateWords
부울
no

하위 단어의 실행을 연결할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 wi-fiwifi로 연결합니다.

기본값: false

delimiterOptions
.concatenateNumbers
부울
no

하위 번호의 실행을 연결할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 100-21002로 연결합니다.

기본값: false

delimiterOptions
.concatenateAll
부울
no

모든 실행을 연결할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 wi-fi-100-2wifi1002로 연결합니다.

기본값: false

delimiterOptions
.preserveOriginal
부울
no

원래 단어의 토큰을 생성할지 여부를 나타내는 플래그입니다.

기본값: true

delimiterOptions
.splitOnCaseChange
부울
no

대소문자 전환에 따라 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 camelCasecamelCase로 분할합니다.

기본값: true

delimiterOptions
.splitOnNumerics
부울
no

문자-숫자 전환에 따라 토큰을 분할할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 g2gg, 2g로 분할합니다.

기본값: true

delimiterOptions
.stemEnglishPossessive
부울
no

각 하위 단어에서 후행 소유격을 제거할지 여부를 나타내는 플래그입니다. 예를 들어 true인 경우 이 옵션은 who'swho로 변경합니다.

기본값: true

delimiterOptions
.ignoreKeywords
부울
no

keyword 속성이 true로 설정된 토큰을 건너뛸지 여부를 나타내는 플래그입니다.

기본값: false

protectedWords
객체
no

보호된 단어에 대한 옵션이 포함된 객체입니다.

기본값: {}

protectedWords
.words
배열
조건부
구분되지 않도록 보호할 토큰이 포함된 목록입니다. protectedWords를 지정하는 경우 이 옵션을 지정해야 합니다.
protectedWords
.ignoreCase
부울
no

보호된 단어의 대소문자 구분을 무시할지 여부를 나타내는 플래그입니다.

기본값: true

true인 경우, 이 옵션 뒤에 flattenGraph 토큰 필터를 적용하여 토큰 스트림을 인덱싱에 적합하게 만듭니다.

다음 인덱스 정의는 wordDelimiterGraphAnalyzer라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 title 필드를 인덱싱합니다. 사용자 지정 분석기는 다음을 지정합니다.

  1. 공백 토크나이저를 적용하여 단어 사이의 공백 발생을 기준으로 토큰을 생성합니다.

  2. 다음에 wordDelimiterGraph 토큰 필터를 적용합니다.

    • is, the, at를 분할하려고 하지 마세요. 제외는 대소문자를 구분합니다. 예를 들어 IstHe 는 제외되지 않습니다.

    • 대소문자 변경 시 토큰을 분할하고 영어 알파벳에서 알파벳만 포함된 토큰을 제거합니다.

  1. Custom Analyzers 섹션에서 Add Custom Analyzer을 클릭합니다.

  2. Create Your Own 라디오 버튼을 선택하고 Next을 클릭합니다.

  3. Analyzer Name 필드에 wordDelimiterGraphAnalyzer을 입력합니다.

  4. 접힌 경우 Tokenizer을(를) 펼칩니다.

  5. 드롭다운 메뉴에서 whitespace 을(를) 선택합니다.

  6. Token Filters을(를) 확장하고 Add token filter을(를) 클릭합니다.

  7. 드롭다운에서 lowercase을(를) 선택하고 Add token filter을(를) 클릭하여 사용자 지정 분석기에 토큰 필터를 추가합니다.

  8. Add token filter을 클릭하여 다른 토큰 필터를 추가합니다.

  9. 드롭다운에서 wordDelimiterGraph 을 선택하고 다음 필드를 구성합니다:

    1. delimiterOptions.generateWordParts 을 선택 취소하고 delimiterOptions.splitOnCaseChange 을 선택합니다.

    2. protectedWords.words 필드에 is, theat 단어를 한 번에 하나씩 입력한 다음 드롭다운에서 선택합니다.

    3. protectedWords.ignoreCase을(를) 선택 취소합니다.

  10. 사용자 지정 분석기에 토큰 필터를 추가하려면 Add token filter 을 클릭합니다.

  11. 사용자 지정 분석기를 만들려면 Add 을 클릭합니다.

  12. Field Mappings 섹션에서 Add Field Mapping 를 클릭하여 제목 중첩 필드에 사용자 지정 분석기를 적용합니다.

  13. 중첩된 titleField Name 드롭다운에서, Data Type 드롭다운의 문자열과 함께 선택합니다.

  14. 데이터 유형의 속성 섹션에 있는 Index AnalyzerSearch Analyzer 드롭다운에서 wordDelimiterGraphAnalyzer 선택합니다.

  15. 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
}
}
]
}
]
}

다음 쿼리는 minutes 컬렉션의 title 필드에서 용어 App2을 검색합니다.

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가 포함되어 있기 때문에 Atlas Search는 _id: 4가 포함된 문서를 반환합니다. Atlas Search는 대소문자 변경 시 토큰을 분할하고 분할에 의해 생성된 토큰 중 알파벳 문자만 포함된 토큰을 제거합니다. 또한 인덱스 분석기를 사용하여(또는 지정된 경우 searchAnalyzer을 사용하여) 쿼리 용어를 분석해 대소문자 변경 시 단어를 분할하고 2 앞의 문자를 제거합니다. 구체적으로, Atlas Search는 protectedWordsdelimiterOptions 옵션에 대해 _id : 4가 포함된 문서에 대해 다음과 같은 토큰을 생성합니다.

wordDelimiterGraph 옵션
출력 토큰
protectedWords
The, daily, huddle, on, t, He, Stand, Up, App, 2
delimiterOptions
The, daily, huddle, on, 2

돌아가기

토크나이저