カスタムアナライザのトークナイザは、 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フィールドに
edgegramExample
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからedgeGramを選択し、次のフィールドに値を入力します。
フィールド値minGram
2
maxGram
7
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
edgegramExample
セクションで、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フィールドに
keywordExample
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [keyword] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
keywordExample
セクションで、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フィールドに
ngramAnalyzer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからnGramを選択し、次のフィールドに値を入力します。
フィールド値minGram
4
maxGram
6
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
ngramAnalyzer
セクションで、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フィールドに
phoneNumberExtractor
と入力します。[ Character Filtersを展開し、[ Add character filter ] をクリックします。
ドロップダウンからmappingを選択し、 をクリックします。 Add mapping 。
Originalフィールドに次の文字を 1 つずつ入力し、対応するReplacementフィールドは空のままにします。
元のreplacement-
.
(
)
[Add character filter] をクリックします。
Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからregexCaptureGroupを選択し、次のフィールドに値を入力します。
フィールド値pattern
^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$
group
0
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by . 電話 フィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by . 電話を選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
phoneNumberExtractor
セクションで、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フィールドに
dashDotSpaceSplitter
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからregexSplitを選択し、次のフィールドに値を入力します。
フィールド値pattern
[-. ]+
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by . 電話 フィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by . 電話を選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
dashDotSpaceSplitter
セクションで、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フィールドに
standardExample
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
standardExample
セクションで、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またはメールアドレスを含まないフィールドの場合は、標準のトークナイザを使用してワードブレークルールに基づいてトークンを作成します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| 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フィールドに
basicEmailAddressAnalyzer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [uaxUrlEmail] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by.emailを選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
basicEmailAddressAnalyzer
セクションで、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
フィールドをインデックス化します。 このクエリでは、次の を使用します。
トークン化戦略 を持つ オートコンプリート タイプ
edgeGram
URLとメールアドレスからトークン(検索可能なターム)を作成する
uaxUrlEmail
トークナイザ
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
emailAddressAnalyzer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [uaxUrlEmail] を選択します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからpage_update_by.emailを選択し、 Data Typeドロップダウンからオートコンプリートを選択します。
データタイプのプロパティ
emailAddressAnalyzer
セクションで、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 |
---|---|
|
|
|
|