Docs Menu
Docs Home
/
Atlas
/ / / / /

토크나이저

사용자 지정 분석기의 토크나이저 MongoDB Search가 인덱싱 위해 텍스트를 개별 청크로 분할하는 방법을 결정합니다. 토크나이저에는 유형 필드 필요하며, 일부 토크나이저는 추가 옵션도 필요로 합니다.

구문
"tokenizer": {
"type": "<tokenizer-type>",
"<additional-option>": "<value>"
}

MongoDB Search는 다음 유형의 토크나이저 지원합니다.

  • edgeGram

  • keyword

  • nGram

  • regexCaptureGroup

  • regexSplit

  • 표준

  • uaxUrlEmail

  • whitespace

다음 샘플 인덱스 정의 및 쿼리는 라는 샘플 컬렉션 minutes 사용합니다. 이러한 예제를 따라 하려면 클러스터에 minutes 컬렉션 로드하고 MongoDB 검색 인덱스 만들기 튜토리얼의 단계에 따라 Atlas UI의 Create a Search Index 페이지로 이동합니다. 그런 다음 minutes 컬렉션 데이터 소스로 선택하고 예시 절차에 따라 Atlas UI에서 또는 mongosh를 사용하여 인덱스 생성합니다.


Select your language 드롭다운 메뉴를 사용하여 이 페이지에서 예시의 언어를 설정합니다.


edgeGram 토크나이저는 텍스트 입력의 왼쪽 또는 "엣지"에서 지정된 크기의 n-그램으로 입력을 토큰화합니다. 동의어 또는 자동 완성 필드 매핑 정의를 위한 analyzer 필드에서는 edgeGram 토크나이저와 함께 사용자 지정 분석기를 사용할 수 없습니다.

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

참고

edgeGram 토크나이저는 입력 텍스트의 단어당 및 단어 전체에 걸쳐 여러 출력 토큰을 생성하여 토큰 그래프를 만들어 냅니다.

자동 완성 필드 유형 매핑 정의 및 동의어 매핑이 있는 분석기는 그래프를 생성하지 않는 토크나이저와 함께 사용할 때만 작동하므로, analyzer 자동 완성 필드 유형 매핑 정의 또는 동의어 매핑이 있는 분석기에 대해 필드에 edgeGram 토크나이저가 있는 사용자 지정 분석기를 사용할 수 없습니다.

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 edgeGram이어야 합니다.

minGram

integer

생성된 가장 짧은 토큰에 포함할 문자 수입니다.

maxGram

integer

생성된 가장 긴 토큰에 포함할 문자 수입니다.

다음 인덱스 정의는 edgegramExample이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. edgeGram 토크나이저를 사용하여 message 필드의 단어 왼쪽에 있는 첫 번째 문자로부터 문자 2 ~ 7 사이에서 토큰(검색 가능한 텀)을 생성합니다.

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

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

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

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

  5. 드롭다운에서 edgeGram을 선택하고 다음 필드에 값을 입력합니다.

    필드

    minGram

    2

    maxGram

    7

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

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

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

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

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

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

{
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "edgegramExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "edgegramExample",
"tokenFilters": [],
"tokenizer": {
"maxGram": 7,
"minGram": 2,
"type": "edgeGram"
}
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": true,
6 "fields": {
7 "message": {
8 "analyzer": "edgegramExample",
9 "type": "string"
10 }
11 }
12 },
13 "analyzers": [
14 {
15 "charFilters": [],
16 "name": "edgegramExample",
17 "tokenFilters": [],
18 "tokenizer": {
19 "maxGram": 7,
20 "minGram": 2,
21 "type": "edgeGram"
22 }
23 }
24 ]
25 }
26)

다음 쿼리는 minutes collection의 message 필드에서 tr로 시작하는 텍스트를 검색합니다.

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "text": {
    "query": "tr",
    "path": "message"
    }
    }
    }
    SCORE: 0.3150668740272522 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    last_name: "AUERBACH"
    first_name: "Siân"
    email: "auerbach@example.com"
    phone: "(123)-456-7890"
    text: Object
    en_US: "<head> This page deals with department meetings.</head>"
    sv_FI: "Den här sidan behandlar avdelningsmöten"
    fr_CA: "Cette page traite des réunions de département"
    SCORE: 0.3150668740272522 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    last_name: "LEWINSKY"
    first_name: "Brièle"
    email: "lewinsky@example.com"
    phone: "(123).456.9870"
    text: Object
    en_US: "<body>We'll head out to the conference room by noon.</body>"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "tr",
6 "path": "message"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "message": 1
14 }
15 }
16])
{ _id: 1, message: 'try to siGn-In' },
{ _id: 3, message: 'try to sign-in' }

MongoDB Search는 검색 텀 _id: 1 _id: 3 일치하는 문서의 {MongoDB} 토크나이저 사용하여 값의 토큰을 생성했기 때문에 tr edgeGram 결과에 및 이 포함된 문서를 반환합니다. standard 토크나이저 사용하여 message 필드 인덱스 경우 MongoDB Search는 검색 tr 텀 대한 결과를 반환하지 않습니다.

다음 표는 edgeGram 토크나이저와 이와는 대조적인 standard 토크나이저가 결과 내 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

try, to, sign, in

edgeGram

tr, try, try{SPACE}, try t, try to, try to{SPACE}

keyword 토크나이저 전체 입력을 단일 토큰으로 토큰화합니다. MongoDB Search는 keyword 토크 토크나이저 사용하여 32766 자를 초과하는 문자열 필드를 인덱스 하지 않습니다.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 keyword이어야 합니다.

다음 인덱스 정의는 keywordExample이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 message 필드를 인덱싱합니다. keyword 토크나이저를 사용하여 전체 필드에 대한 토큰(검색 가능한 텀)을 단일 텀으로 생성합니다.

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

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

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

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

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

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

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

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

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

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

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

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "message": {
6 "analyzer": "keywordExample",
7 "type": "string"
8 }
9 }
10 },
11 "analyzers": [
12 {
13 "charFilters": [],
14 "name": "keywordExample",
15 "tokenFilters": [],
16 "tokenizer": {
17 "type": "keyword"
18 }
19 }
20 ]
21}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": true,
6 "fields": {
7 "message": {
8 "analyzer": "keywordExample",
9 "type": "string"
10 }
11 }
12 },
13 "analyzers": [
14 {
15 "charFilters": [],
16 "name": "keywordExample",
17 "tokenFilters": [],
18 "tokenizer": {
19 "type": "keyword"
20 }
21 }
22 ]
23 }
24)

다음 message 쿼리는 minutes 컬렉션의 필드에서 구문 try to sign-in을 검색합니다.

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "text": {
    "query": "try to sign-in",
    "path": "message"
    }
    }
    }
    SCORE: 0.5472603440284729 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    last_name: "LEWINSKY"
    first_name: "Brièle"
    email: "lewinsky@example.com"
    phone: "(123).456.9870"
    text: Object
    en_US: "<body>We'll head out to the conference room by noon.</body>"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "try to sign-in",
6 "path": "message"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "message": 1
14 }
15 }
16])
{ _id: 3, message: 'try to sign-in' }

MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3 토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 try to sign-in 포함된 keyword 문서 를 반환합니다. standard 토크나이저 사용하여 message 필드 인덱스 경우, 각 문서 standard 일부 토큰이 포함되어 있기 때문에 MongoDB Search는 검색 try to sign-in 텀 대해 _id: 1, _id: 2, _id: 3 이 있는 문서를 반환합니다. 토크나이저 생성합니다.

다음 표는 keyword 토크나이저와 이와는 대조적인 standard 토크나이저가 _id: 3을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

try, to, sign, in

keyword

try to sign-in

nGram 토크나이저는 주어진 크기의 텍스트 청크 또는 'n-gram'으로 토큰화합니다. analyzer 필드에서 동의어 또는 자동 완성 필드 매핑 정의에 대해 사용자 지정 분석기를 nGram 토크나이저와 함께 사용할 수 없습니다.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 nGram이어야 합니다.

minGram

integer

생성된 가장 짧은 토큰에 포함할 문자 수입니다.

maxGram

integer

생성된 가장 긴 토큰에 포함할 문자 수입니다.

다음 인덱스 정의는 ngramExample이라는 사용자 지정 분석기를 사용하여 minutes collection의 title 필드를 인덱싱합니다. nGram 토크나이저를 사용하여 title 필드에서 4자와 6자 사이의 토큰(검색 가능한 용어)을 생성합니다.

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

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

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

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

  5. 드롭다운에서 nGram을 선택하고 다음 필드에 값을 입력합니다.

    필드

    minGram

    4

    maxGram

    6

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

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

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

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

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

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

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "title": {
6 "analyzer": "ngramExample",
7 "type": "string"
8 }
9 }
10 },
11 "analyzers": [
12 {
13 "charFilters": [],
14 "name": "ngramExample",
15 "tokenFilters": [],
16 "tokenizer": {
17 "maxGram": 6,
18 "minGram": 4,
19 "type": "nGram"
20 }
21 }
22 ]
23}
db.minutes.createSearchIndex("default", {
"mappings": {
"dynamic": true,
"fields": {
"title": {
"analyzer": "ngramExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "ngramExample",
"tokenFilters": [],
"tokenizer": {
"maxGram": 6,
"minGram": 4,
"type": "nGram"
}
}
]
})

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

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "week",
    "path": "title"
    }
    }
    }
    SCORE: 0.5895273089408875 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    last_name: "AUERBACH"
    first_name: "Siân"
    email: "auerbach@example.com"
    phone: "(123)-456-7890"
    text: Object
    en_US: "<head> This page deals with department meetings.</head>"
    sv_FI: "Den här sidan behandlar avdelningsmöten"
    fr_CA: "Cette page traite des réunions de département"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "week",
6 "path": "title"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "title": 1
14 }
15 }
16])
{ _id: 1, title: "The team's weekly meeting" }

MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 1 토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 week 포함된 nGram 문서 를 반환합니다. standard 또는 edgeGram 토크나이저 사용하여 title 필드 인덱스 경우 MongoDB Search는 검색 week 텀 대한 결과를 반환하지 않습니다.

다음 표는 nGram 토크나이저와 이와는 대조적인 standardedgeGram토크나이저가 _id: 1을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

The, team's, weekly, meeting

edgeGram

The{SPACE}, The t, The te

nGram

The{SPACE}, The t, The te, he t, ... , week, weekl, weekly, eekl, ..., eetin, eeting, etin, eting, ting

regexCaptureGroup 토크나이저는 Java 정규 표현식 패턴을 일치시켜 토큰을 추출합니다.

Java 정규 표현식 구문에 대해 자세히 학습하려면 Java 문서에서 패턴 클래스를 참조하세요.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 regexCaptureGroup이어야 합니다.

pattern

문자열

일치시킬 정규 표현식.

group

integer

토큰으로 추출할 일치하는 표현식 내 문자 그룹의 인덱스입니다. 모든 문자 그룹을 추출하려면 0을 사용합니다.

다음 인덱스 정의는 phoneNumberExtractor라는 사용자 지정 분석기를 사용하여 minutes collection의 page_updated_by.phone 필드를 인덱싱합니다. 다음을 사용합니다.

  • mappings 처음 세 자리 숫자의 괄호를 제거하고 모든 공백과 마침표를 대시로 바꾸는 문자 필터

  • regexCaptureGroup 토크나이저를 사용하여 텍스트 입력에 있는 첫 번째 미국 형식의 전화번호에서 단일 토큰을 만듭니다.

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

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

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

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

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

  6. Original 필드에 다음 문자를 한 번에 하나씩 입력하고 해당 Replacement 필드는 비워 둡니다.

    원본
    교체

    -

    .

    (

    )

  7. Add character filter를 클릭합니다.

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

  9. 드롭다운에서 regexCaptureGroup을 선택하고 다음 필드에 값을 입력합니다.

    필드

    pattern

    ^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$

    group

    0

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

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

  12. Field Name 드롭다운에서 page_updated_by.phone을 선택하고 Data Type 드롭다운에서 문자열을 선택합니다.

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

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

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

{
"mappings": {
"dynamic": true,
"fields": {
"page_updated_by": {
"fields": {
"phone": {
"analyzer": "phoneNumberExtractor",
"type": "string"
}
},
"type": "document"
}
}
},
"analyzers": [
{
"charFilters": [
{
"mappings": {
" ": "-",
"(": "",
")": "",
".": "-"
},
"type": "mapping"
}
],
"name": "phoneNumberExtractor",
"tokenFilters": [],
"tokenizer": {
"group": 0,
"pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$",
"type": "regexCaptureGroup"
}
}
]
}
db.minutes.createSearchIndex("default", {
"mappings": {
"dynamic": true,
"fields": {
"page_updated_by": {
"fields": {
"phone": {
"analyzer": "phoneNumberExtractor",
"type": "string"
}
},
"type": "document"
}
}
},
"analyzers": [
{
"charFilters": [
{
"mappings": {
" ": "-",
"(": "",
")": "",
".": "-"
},
"type": "mapping"
}
],
"name": "phoneNumberExtractor",
"tokenFilters": [],
"tokenizer": {
"group": 0,
"pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$",
"type": "regexCaptureGroup"
}
}
]
})

다음 page_updated_by.phone 쿼리는 minutes 컬렉션의 필드에서 전화번호 123-456-9870을 검색합니다.

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "123-456-9870",
    "path": "page_updated_by.phone"
    }
    }
    }
    SCORE: 0.5472603440284729 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    last_name: "LEWINSKY"
    first_name: "Brièle"
    email: "lewinsky@example.com"
    phone: "(123).456.9870"
    text: Object
    en_US: "<body>We'll head out to the conference room by noon.</body>"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "123-456-9870",
6 "path": "page_updated_by.phone"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "page_updated_by.phone": 1
14 }
15 }
16])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }

MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3 토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 123-456-7890 포함된 regexCaptureGroup 문서 를 반환합니다. standard 토크나이저 사용하여 page_updated_by.phone 필드 인덱스 하면 MongoDB Search는 검색 123-456-7890 텀 대한 모든 문서를 반환합니다.

다음 표는 regexCaptureGroup 토크나이저와 이와는 대조적인 standard 토크나이저가 _id: 3을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

123, 456.9870

regexCaptureGroup

123-456-9870

regexSplit 토크나이저는 Java 정규 표현식 기반 구분 기호를 사용하여 토큰을 분할합니다.

Java 정규 표현식 구문에 대해 자세히 알아보려면 Java 문서의 Pattern 클래스를 참조하세요.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 regexSplit이어야 합니다.

pattern

문자열

일치시킬 정규 표현식.

다음 인덱스 정의는 dashDotSpaceSplitter이라는 사용자 지정 분석기를 사용하여 minutes 컬렉션의 page_updated_by.phone 필드를 인덱싱합니다. regexSplit 토크나이저를 사용하여 page_updated_by.phone 필드에 있는 하나 이상의 하이픈, 마침표 및 공백으로 토큰(검색 가능한 텀)을 생성합니다.

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

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

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

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

  5. 드롭다운에서 regexSplit을 선택하고 다음 필드에 값을 입력합니다.

    필드

    pattern

    [-. ]+

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

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

  8. Field Name 드롭다운에서 page_updated_by.phone을 선택하고 Data Type 드롭다운에서 문자열을 선택합니다.

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

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

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

{
"mappings": {
"dynamic": true,
"fields": {
"page_updated_by": {
"fields": {
"phone": {
"analyzer": "dashDotSpaceSplitter",
"type": "string"
}
},
"type": "document"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "dashDotSpaceSplitter",
"tokenFilters": [],
"tokenizer": {
"pattern": "[-. ]+",
"type": "regexSplit"
}
}
]
}
db.minutes.createSearchIndex("default", {
"mappings": {
"dynamic": true,
"fields": {
"page_updated_by": {
"fields": {
"phone": {
"analyzer": "dashDotSpaceSplitter",
"type": "string"
}
},
"type": "document"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "dashDotSpaceSplitter",
"tokenFilters": [],
"tokenizer": {
"pattern": "[-. ]+",
"type": "regexSplit"
}
}
]
})

다음 page_updated_by.phone 쿼리는 minutes 컬렉션의 필드에서 숫자 9870을 검색합니다.

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "9870",
    "path": "page_updated_by.phone"
    }
    }
    }
    SCORE: 0.5472603440284729 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    last_name: "LEWINSKY"
    first_name: "Brièle"
    email: "lewinsky@example.com"
    phone: "(123).456.9870"
    text: Object
    en_US: "<body>We'll head out to the conference room by noon.</body>"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "9870",
6 "path": "page_updated_by.phone"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "page_updated_by.phone": 1
14 }
15 }
16])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }

MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3 토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 9870 포함된 regexSplit 문서 를 반환합니다. standard 토크나이저 사용하여 page_updated_by.phone 필드 인덱스 경우 MongoDB Search는 검색 9870 텀 대한 결과를 반환하지 않습니다.

다음 표는 regexCaptureGroup 토크나이저와 이와는 대조적인 standard 토크나이저가 _id: 3을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

123, 456.9870

regexSplit

(123), 456, 9870

standard 토크나이저는 유니코드 텍스트 세분화 알고리즘의 단어 나누기 규칙에 따라 토큰화합니다.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 standard이어야 합니다.

maxTokenLength

integer

no

단일 토큰의 최대 길이입니다. 이 길이보다 큰 토큰은 maxTokenLength에서 여러 토큰으로 분할됩니다.

기본값: 255

다음 인덱스 정의는 standardExample(이)라는 사용자 지정 분석기를 사용하여 minutes collection의 message 필드를 인덱싱합니다. standard 토크나이저 및 stopword 토큰 필터를 사용합니다.

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "standardExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "standardExample",
"tokenFilters": [],
"tokenizer": {
"type": "standard"
}
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": true,
6 "fields": {
7 "message": {
8 "analyzer": "standardExample",
9 "type": "string"
10 }
11 }
12 },
13 "analyzers": [
14 {
15 "charFilters": [],
16 "name": "standardExample",
17 "tokenFilters": [],
18 "tokenizer": {
19 "type": "standard"
20 }
21 }
22 ]
23 }
24)

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

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "text": {
    "query": "signature",
    "path": "message"
    }
    }
    }
    SCORE: 0.5376965999603271 _id: "4"
    message: "write down your signature or phone №"
    page_updated_by: Object
    last_name: "LEVINSKI"
    first_name: "François"
    email: "levinski@example.com"
    phone: "123-456-8907"
    text: Object
    en_US: "<body>This page has been updated with the items on the agenda.</body>"
    es_MX: "La página ha sido actualizada con los puntos de la agenda."
    pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "signature",
6 "path": "message"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "message": 1
14 }
15 }
16])
{ _id: 4, message: 'write down your signature or phone №' }

MongoDB Search는 검색 와 일치 텀 문서의 standard 토크나이저 사용하여 signature 값의 토큰을 생성했기 때문에 _id: 4 이 포함 MongoDB 문서 를 반환합니다. keyword 토크나이저 사용하여 message 필드 인덱스 경우 MongoDB Search는 검색 signature 텀 대한 결과를 반환하지 않습니다.

다음 표는 standard 토크나이저와 이와는 대조적인 keyword 분석기가 _id: 4를 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

write, down, your, signature, or, phone

keyword

write down your signature or phone №

uaxUrlEmail 토크나이저 URL및 이메일 주소를 토큰화합니다. uaxUrlEmail 토크나이저 유니코드 텍스트 분할 알고리즘의 단어 나누기 규칙에 따라 토큰화하지만, 인덱싱된 필드 값에 URL및 이메일 주소가 포함된 경우에만 uaxUrlEmail 토크나이저 사용하는 것이 좋습니다. URL이나 이메일 주소가 포함되지 않은 필드의 경우 표준 토크나이저 사용하여 단어 나누기 규칙에 따라 토큰을 생성합니다.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 uaxUrlEmail이어야 합니다.

maxTokenLength

int

no

하나의 토큰에 포함될 수 있는 최대 문자 수입니다.

기본값: 255

whitespace 토크나이저는 단어 사이의 공백 발생을 기반으로 토큰화합니다.

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

이름
유형
필수 사항입니다.
설명

type

문자열

이 토크나이저 유형을 식별하는 사람이 읽을 수 있는 레이블입니다. 값은 whitespace이어야 합니다.

maxTokenLength

integer

no

단일 토큰의 최대 길이입니다. 이 길이보다 큰 토큰은 maxTokenLength에서 여러 토큰으로 분할됩니다.

기본값: 255

다음 인덱스 정의는 whitespaceExample이라는 사용자 지정 분석기를 사용하여 minutes collection의 message 필드를 인덱싱합니다. whitespace 토크나이저를 사용하여 message 필드의 모든 공백에서 토큰(검색 가능한 용어)을 생성합니다.

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "whitespaceExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "whitespaceExample",
"tokenFilters": [],
"tokenizer": {
"type": "whitespace"
}
}
]
}
db.minutes.createSearchIndex("default", {
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "whitespaceExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "whitespaceExample",
"tokenFilters": [],
"tokenizer": {
"type": "whitespace"
}
}
]
})

다음 message 쿼리는 minutes 컬렉션의 필드에서 용어 SIGN-IN를 검색합니다.

  1. 인덱스 의 Query 버튼을 클릭합니다.

  2. 쿼리 편집하려면 Edit Query 을(를) 클릭합니다.

  3. 쿼리 줄에서 을 클릭하고 데이터베이스 와 컬렉션 선택합니다.

  4. 기본값 쿼리 다음으로 바꾸고 Find을 클릭합니다.

    {
    "$search": {
    "text": {
    "query": "sign-in",
    "path": "message"
    }
    }
    }
    SCORE: 0.6722691059112549 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    last_name: "LEWINSKY"
    first_name: "Brièle"
    email: "lewinsky@example.com"
    phone: "(123).456.9870"
    text: Object
    en_US: "<body>We'll head out to the conference room by noon.</body>"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "sign-in",
6 "path": "message"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "message": 1
14 }
15 }
16])
[ { _id: 3, message: 'try to sign-in' } ]

MongoDB Search는 검색 텀 일치하는 문서의 {MongoDB} _id: 3 토크나이저 사용하여 값이 인 토큰을 생성했기 때문에 결과에 이 sign-in 포함된 whitespace 문서 를 반환합니다. standard 토크나이저 사용하여 message 필드 인덱스 하면 MongoDB Search는 검색 sign-in 텀 대해 _id: 1, _id: 2, _id: 3 이 포함된 문서를 반환합니다.

다음 표는 whitespace 토크나이저와 이와는 대조적인 standard 토크나이저가 _id: 3을 사용하여 문서에 대해 생성하는 토큰을 보여줍니다.

토크나이저
Token Outputs

standard

try, to, sign, in

whitespace

try, to, sign-in

돌아가기

문자 필터

이 페이지의 내용