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 Search インデックスの作成」チュートリアルの手順に従って、Atlas UIの Create a Search Index ページに移動します。次に、データソースとして minutesコレクションを選択し、例手順に従って、Atlas UIまたはmongosh を使用してインデックスを作成します。


➤ [言語の選択] ドロップダウン メニューを使用して、このページの例の言語を設定します。


edgeGramトークナイザは、テキスト入力の左側、つまり「エッジ」からの入力を指定されたサイズの n グラムにトークン化します。 シノニムanalyzer または オートコンプリート フィールド マッピング定義 の フィールドでは、 edgeGram トークナイザ とカスタムアナライザを使用することはできません。

これには次の属性があります。

注意

edgeGramトークナイザは、1 単語ごとおよび入力テキスト内の単語全体に複数の出力トークンを生成し、トークン グラフを生成します。

オートコンプリート フィールド型マッピング定義と シノニム マッピングを持つアナライザは、グラフを生成しないトークナイザで使用された場合にのみ機能するため、analyzer オートコンプリート フィールド型マッピング定義または シノニム を持つアナライザには、 フィールドで EdgeGram トークナイザ を含むカスタムアナライザを使用することはできませんマッピング。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はedgeGramである必要があります。

minGram

integer

はい

作成された最短のトークンに含める文字数。

maxGram

integer

はい

作成された最長トークンに含める文字数。

次のインデックス定義は、 edgegramExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 edgeGramトークナイザを使用して、2 7フィールドの単語の左側の最初の文字から始まる 文字と 文字の長さのトークン(検索可能なターム)を作成します。message

  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 ドロップダウンからstringを選択します。

  9. データタイプのプロパティedgegramExample セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

  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コレクションの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 は、検索タームに一致MongoDBドキュメントの edgeGramトークナイザを使用して、値 tr のトークンを作成したため、結果に _id: 1_id: 3 を含むドキュメントを返します。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 文字を超える string フィールドのインデックスしません。

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はkeywordである必要があります。

次のインデックス定義は、 keywordExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 keywordトークナイザを使用して、フィールド全体にトークン(検索可能なターム)を 1 つのタームとして作成します。

  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 ドロップダウンからstringを選択します。

  9. データタイプのプロパティkeywordExample セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

  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)

次のクエリは、 minutesコレクションのmessageフィールドでフレーズ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ドキュメントの keywordトークナイザを使用して、値 try to sign-in のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。standardトークナイザを使用して messageフィールドをインデックスと、 MongoDB Search は検索タームtry to sign-in に対して _id: 1_id: 2_id: 3 を含むドキュメントを返します。これは、各ドキュメントにいくつかのトークンが含まれているためです。standardトークナイザはを作成します。

次の表は、 keywordトークナイザと比較してstandardトークナイザが_id: 3を含むドキュメントに対して作成するトークンを示しています。

トークナイザ
Token Outputs

standard

try, to, sign, in

keyword

try to sign-in

nGramトークナイザは、指定されたサイズのテキストチャンク、つまり「n グラム」にトークン化します。 シノニム (同意語) または オートコンプリート フィールドのマッピング定義 では、 フィールドで nGram トークナイザ とカスタムアナライザを使用することはできません。analyzer

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はnGramである必要があります。

minGram

integer

はい

作成された最短のトークンに含める文字数。

maxGram

integer

はい

作成された最長トークンに含める文字数。

次のインデックス定義は、 ngramExampleという名前のカスタムアナライザを使用して、 minutesコレクションの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 ドロップダウンからstringを選択します。

  9. データタイプのプロパティngramAnalyzer セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

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

次のクエリは、 minutesコレクションのtitleフィールドで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ドキュメントの nGramトークナイザを使用して、値 week のトークンを作成したため、結果に _id: 1 を含むドキュメントを返します。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 の正規表現パターンを使用してトークンを抽出します。

Tip

Java 正規表現構文の詳細については、Java ドキュメントの「Pattern(パターン)」クラスを参照してください。

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はregexCaptureGroupである必要があります。

pattern

string

はい

照合する正規表現。

group

integer

はい

トークンに抽出する一致する式内の文字グループのインデックス。 すべての文字グループを抽出するには、 0を使用します。

次のインデックス定義は、 phoneNumberExtractorという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.phoneフィールドをインデックス化します。 このクエリでは、次の を使用します。

  • mappings 文字フィルター : 最初の 3 桁の括弧を除き、すべてのスペースとピリオドをダッシュに置き換えます。

  • regexCaptureGroup テキスト入力に存在する最初の米国形式の電話番号から単一のトークンを作成するためのトークナイザ

  1. Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。

  2. Create Your Ownラジオボタンを選択し、Next をクリックします。

  3. Analyzer NameフィールドにphoneNumberExtractorと入力します。

  4. [ Character Filtersを展開し、[ Add character filter ] をクリックします。

  5. ドロップダウンからmappingを選択し、 をクリックします。 Add mapping

  6. Originalフィールドに次の文字を 1 つずつ入力し、対応するReplacementフィールドは空のままにします。

    元の
    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_update_by . 電話 フィールドにカスタムアナライザを適用します。

  12. Field Nameドロップダウンからpage_update_by . 電話を選択し、 Data Typeドロップダウンからstringを選択します。

  13. データタイプのプロパティphoneNumberExtractor セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

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

次のクエリは、 minutesコレクションのpage_updated_by.phoneフィールドで電話番号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ドキュメントの regexCaptureGroupトークナイザを使用して、値 123-456-7890 のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。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 の正規表現に基づく区切り文字を使用してトークンを分割します。

Tip

Java 正規表現構文の詳細については、Java ドキュメントの「Pattern(パターン)」クラスを参照してください。

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はregexSplitである必要があります。

pattern

string

はい

照合する正規表現。

次のインデックス定義は、 dashDotSpaceSplitterという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.phoneフィールドをインデックス化します。 regexSplitトークナイザを使用して、 page_updated_by.phoneフィールドの 1 つ以上のハイフン、ピリオド、スペースからトークン(検索可能なターム)を作成します。

  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_update_by . 電話 フィールドにカスタムアナライザを適用します。

  8. Field Nameドロップダウンからpage_update_by . 電話を選択し、 Data Typeドロップダウンからstringを選択します。

  9. データタイプのプロパティdashDotSpaceSplitter セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

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

次のクエリは、 minutesコレクションのpage_updated_by.phoneフィールドで数字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ドキュメントの regexSplitトークナイザを使用して、値 9870 のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。standardトークナイザを使用して page_updated_by.phoneフィールドをインデックスと、 MongoDB Search は検索ターム9870 の結果を返しません。

次の表は、 regexCaptureGroupトークナイザと比較してstandardトークナイザが_id: 3を含むドキュメントに対して作成するトークンを示しています。

トークナイザ
Token Outputs

standard

123, 456.9870

regexSplit

(123), 456, 9870

standardトークナイザは、Unicode テキスト分割アルゴリズムの 単語の分割ルール に基づいてトークン化します。

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はstandardである必要があります。

maxTokenLength

integer

no

単一トークンの最大長。 この長さを超えるトークンは、 maxTokenLengthで複数のトークンに分割されます。

デフォルト: 255

次のインデックス定義は、 standardExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 standardトークナイザとストップワード トークン フィルター を使用します。

  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 ドロップダウンからstringを選択します。

  9. データタイプのプロパティstandardExample セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

  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)

次のクエリは、 minutesコレクションのmessageフィールドで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 は、検索タームに一致MongoDBドキュメントの standardトークナイザを使用して、値 signature のトークンを作成したため、_id: 4 を含むドキュメントを返します。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トークナイザはUnicode テキスト分割アルゴリズムの単語の分割ルールに基づいてトークン化しますが、インデックス付きフィールド値にURLとメールアドレスが含まれている場合にのみ uaxUrlEmailトークナイザを使用することを推奨します。URLまたはメールアドレスを含まないフィールドの場合は、標準のトークナイザを使用してワードブレークルールに基づいてトークンを作成します。

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はuaxUrlEmailである必要があります。

maxTokenLength

整数

no

1 つのトークン内の最大文字数。

デフォルト: 255

whitespaceトークナイザは、単語間の空白の発生に基づいてトークン化します。

これには次の属性があります。

名前
タイプ
必須
説明

type

string

はい

このトークナイザのタイプを識別する、人間が判読できるラベル。 値はwhitespaceである必要があります。

maxTokenLength

integer

no

単一トークンの最大長。 この長さを超えるトークンは、 maxTokenLengthで複数のトークンに分割されます。

デフォルト: 255

次のインデックス定義は、 whitespaceExampleという名前のカスタムアナライザを使用して、 minutesコレクションの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 ドロップダウンからstringを選択します。

  9. データタイプのプロパティwhitespaceExample セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。

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

次のクエリは、 minutesコレクションのmessageフィールドで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ドキュメントの whitespaceトークナイザを使用して、値 sign-in のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。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

戻る

文字フィルター

項目一覧