カスタムアナライザのトークナイザは、 MongoDB Search がインデックスを作成するためにテキストを個別のチャンクに分割する方法を決定します。トークナイザにはタイプフィールドが必要で、一部のトークナイザは追加のオプションも受け取ります。
"tokenizer": { "type": "<tokenizer-type>", "<additional-option>": "<value>" }
トークナイザタイプ
MongoDB Search は次のタイプのトークナイザをサポートしています。
次のサンプルインデックス定義とクエリでは、サンプルコレクション という名前のminutesを使用します。これらの例に従うには、クラスターに minutesコレクションをロードし、「MongoDB Search インデックスの作成」チュートリアルの手順に従って、Atlas UIの Create a Search Index ページに移動します。次に、データソースとしてminutes コレクションを選択し、例手順に従って、Atlas UIからまたはmongosh を使用してインデックスを作成します。
➤ [言語の選択] ドロップダウン メニューを使用して、このページの例の言語を設定します。
edgeGram
edgeGramトークナイザは、テキスト入力の左側、つまり「エッジ」からの入力を指定されたサイズの n グラムにトークン化します。 シノニムanalyzer または オートコンプリート フィールド マッピング定義 の フィールドでは、 edgeGram トークナイザ とカスタムアナライザを使用することはできません。
属性
これには次の属性があります。
注意
edgeGramトークナイザは、1 単語ごとおよび入力テキスト内の単語全体に複数の出力トークンを生成し、トークン グラフを生成します。
オートコンプリート フィールド型マッピング定義と シノニム マッピングを持つアナライザは、グラフを生成しないトークナイザで使用された場合にのみ機能するため、analyzer オートコンプリート フィールド型マッピング定義または シノニム を持つアナライザには、 フィールドで EdgeGram トークナイザ を含むカスタムアナライザを使用することはできませんマッピング。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | 作成された最短のトークンに含める文字数。 |
| integer | はい | 作成された最長トークンに含める文字数。 |
例
次のインデックス定義は、 edgegramExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 edgeGramトークナイザを使用して、2 7フィールドの単語の左側の最初の文字から始まる 文字と 文字の長さのトークン(検索可能なターム)を作成します。message
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからwhitespaceを選択し、次のフィールドに値を入力します。
フィールド値minGram
2maxGram
7Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "edgegramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "edgegramExample", "tokenFilters": [], "tokenizer": { "maxGram": 7, "minGram": 2, "type": "edgeGram" } } ] }
1 db.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で始まるテキストを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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>"
1 db.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 |
|---|---|
|
|
|
|
keyword
keywordトークナイザは入力全体を単一のトークンとしてトークン化します。MongoDB Search は、keywordトークナイザを使用して、32766 文字を超える string フィールドのインデックスしません。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 keywordExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 keywordトークナイザを使用して、フィールド全体にトークン(検索可能なターム)を 1 つのタームとして作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 }
1 db.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を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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>"
1 db.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 |
|---|---|
|
|
|
|
nGram
nGramトークナイザは、指定されたサイズのテキストチャンク、つまり「n グラム」にトークン化します。 シノニム (同意語) または オートコンプリート フィールドのマッピング定義 では、 フィールドで nGram トークナイザ とカスタムアナライザを使用することはできません。analyzer
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | 作成された最短のトークンに含める文字数。 |
| integer | はい | 作成された最長トークンに含める文字数。 |
例
次のインデックス定義は、 ngramExampleという名前のカスタムアナライザを使用して、 minutesコレクションのtitleフィールドをインデックス化します。 nGramトークナイザを使用して、 titleフィールドに4から6文字の長さのトークン(検索可能なターム)を作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからwhitespaceを選択し、次のフィールドに値を入力します。
フィールド値minGram
4maxGram
6Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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"
1 db.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トークナイザと比較して、 standardとedgeGramトークナイザが_id: 1を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
|---|---|
|
|
|
|
|
|
regexCaptureGroup
regexCaptureGroup トークナイザは、Java の正規表現パターンを使用してトークンを抽出します。
Tip
Java 正規表現構文の詳細については、Java ドキュメントの「Pattern(パターン)」クラスを参照してください。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| string | はい | 照合する正規表現。 |
| integer | はい | トークンに抽出する一致する式内の文字グループのインデックス。 すべての文字グループを抽出するには、 |
例
次のインデックス定義は、 phoneNumberExtractorという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.phoneフィールドをインデックス化します。 このクエリでは、次の を使用します。
mappings文字フィルター : 最初の 3 桁の括弧を除き、すべてのスペースとピリオドをダッシュに置き換えます。regexCaptureGroupテキスト入力に存在する最初の米国形式の電話番号から単一のトークンを作成するためのトークナイザ
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。[ Character Filtersを展開し、[ Add character filter ] をクリックします。
ドロップダウンからmappingを選択し、 をクリックします。 Add mapping 。
Originalフィールドに次の文字を 1 つずつ入力し、対応するReplacementフィールドは空のままにします。
元のreplacement-.()[Add character filter] をクリックします。
Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからwhitespaceを選択し、次のフィールドに値を入力します。
フィールド値pattern
^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$group
0Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by . 電話 フィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by . 電話を選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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>"
1 db.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 |
|---|---|
|
|
|
|
regexSplit
regexSplit トークナイザは、Java の正規表現に基づく区切り文字を使用してトークンを分割します。
Tip
Java 正規表現構文の詳細については、Java ドキュメントの「Pattern(パターン)」クラスを参照してください。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| string | はい | 照合する正規表現。 |
例
次のインデックス定義は、 dashDotSpaceSplitterという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.phoneフィールドをインデックス化します。 regexSplitトークナイザを使用して、 page_updated_by.phoneフィールドの 1 つ以上のハイフン、ピリオド、スペースからトークン(検索可能なターム)を作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからwhitespaceを選択し、次のフィールドに値を入力します。
フィールド値pattern
[-. ]+Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by . 電話 フィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by . 電話を選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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>"
1 db.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トークナイザは、Unicode テキスト分割アルゴリズムの 単語の分割ルール に基づいてトークン化します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| integer | no | 単一トークンの最大長。 この長さを超えるトークンは、 デフォルト: |
例
次のインデックス定義は、 standardExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 standardトークナイザとストップワード トークン フィルター を使用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "standardExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "standardExample", "tokenFilters": [], "tokenizer": { "type": "standard" } } ] }
1 db.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というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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."
1 db.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 |
|---|---|
|
|
|
|
uaxUrlEmail
uaxUrlEmail トークナイザは URL とメールアドレスをトークン化します。uaxUrlEmail トークナイザは Unicode テキスト セグメンテーション アルゴリズムの単語区切りルールに基づいてトークン化しますが、インデックスフィールド値に URL やメールアドレスが含まれている場合にのみ uaxUrlEmail トークナイザを使用することをお勧めします。URL やメールアドレスを含まないフィールドの場合は、standard トークナイザを使用して単語区切りルールに基づいてトークンを作成します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| 整数 | no | 1 つのトークン内の最大文字数。 デフォルト: |
例
次のインデックス定義は、 basicEmailAddressAnalyzerという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.emailフィールドをインデックス化します。 uaxUrlEmailトークナイザを使用して、 page_updated_by.emailフィールドのURLとメールアドレスからトークン(検索可能なターム)を作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by.emailを選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
次のクエリは、 minutesコレクションのpage_updated_by.emailフィールドでメールlewinsky@example.comを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$search": { "text": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } 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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
MongoDB Search は、検索タームに一致MongoDBドキュメントの uaxUrlEmailトークナイザを使用して、値 lewinsky@example.com のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。standardトークナイザを使用して page_updated_by.emailフィールドをインデックスと、 MongoDB Search は検索タームlewinsky@example.com のすべてのドキュメントを返します。
次の表は、 uaxUrlEmailトークナイザと比較してstandardトークナイザが_id: 3を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
|---|---|
|
|
|
|
次のインデックス定義は、 emailAddressAnalyzerという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.emailフィールドをインデックス化します。 このクエリでは、次の を使用します。
トークン化戦略 を持つ オートコンプリート タイプ
edgeGramURLとメールアドレスからトークン(検索可能なターム)を作成する
uaxUrlEmailトークナイザ
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by.emailを選択し、 Data Typeドロップダウンからオートコンプリートを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
次のクエリは、 minutesコレクションのpage_updated_by.emailフィールドでexamというタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$search": { "autocomplete": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 1.0203158855438232 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
MongoDB Search は、検索タームに一致MongoDBドキュメントの uaxUrlEmailトークナイザを使用して、値 lewinsky@example.com のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。standardトークナイザを使用して page_updated_by.emailフィールドをインデックスと、 MongoDB Search は検索タームlewinsky@example.com のすべてのドキュメントを返します。
次の表は、 uaxUrlEmailトークナイザと比較してstandardトークナイザが_id: 3を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | MongoDB Search フィールド タイプ | Token Outputs |
|---|---|---|
|
|
|
|
|
|
whitespace
whitespaceトークナイザは、単語間の空白の発生に基づいてトークン化します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークナイザのタイプを識別する、人間が判読できるラベル。 値は |
| integer | no | 単一トークンの最大長。 この長さを超えるトークンは、 デフォルト: |
例
次のインデックス定義は、 whitespaceExampleという名前のカスタムアナライザを使用して、 minutesコレクションのmessageフィールドをインデックス化します。 whitespaceトークナイザを使用して、 messageフィールド内の任意の空白からトークン(検索可能なターム)を作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
whitespaceExampleと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
whitespaceExampleセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、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>"
1 db.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 |
|---|---|
|
|
|
|