トークナイザ
カスタムアナライザのトークナイザは、Atlas Search がインデックスを作成するためにテキストを個別のチャンクに分割する方法を決定します。 トークナイザにはタイプ フィールドが必要で、一部のトークナイザは追加のオプションも受け取ります。
"tokenizer": { "type": "<tokenizer-type>", "<additional-option>": "<value>" }
次のサンプル インデックス定義とクエリでは、 minutes
という名前のサンプル コレクションを使用します。 Atlas クラスターのデータベースにminutes
コレクションを追加すると、Atlas UI のビジュアル エディターまたは JSONエディターから次のサンプル インデックスを作成し、このコレクションに対してサンプル クエリを実行できます。 これらのインデックスを作成するには、Atlas UI で希望の構成方法を選択した後、データベースとコレクションを選択し、インデックスを微調整して、トークナイザを使用するカスタムアナライザを追加します。
注意
Atlas UI で Visual Editorを使用してカスタムアナライザを追加すると、Atlas UI のCustom Analyzersセクションにアナライザに関する次の詳細が表示されます。
名前 | カスタムアナライザを識別するラベル。 |
で使用される | カスタムアナライザを使用するフィールド。 カスタム アナライザ がフィールドを分析するために使用されない場合、値は[なし]です。 |
文字フィルター | カスタムアナライザで構成された Atlas Search文字フィルター。 |
トークナイザ | カスタム アナライザ で構成された Atlas Searchトークナイザ。 |
トークン フィルター | カスタムアナライザで構成された Atlas Searchトークン フィルター。 |
アクション | カスタム アナライザで実行できるアクションを示すクリック可能なアイコン。
|
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" } } ] }
次のクエリは、 minutes
コレクションのmessage
フィールドでtr
で始まるテキストを検索します。
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' }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの edgeGram
トークナイザを使用して、値 tr
のトークンを作成したため、結果に _id: 1
と _id: 3
を含むドキュメントを返します。 standard
トークナイザを使用してmessage
フィールドをインデックス化すると、Atlas Search は検索タームtr
の結果を返しません。
次の表は、 edgeGram
トークナイザと比較してstandard
トークナイザが結果内のドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
---|---|
|
|
|
|
keyword
keyword
トークナイザは入力全体を単一のトークンとしてトークン化します。 Atlas 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をクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "keywordExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "keywordExample", "tokenFilters": [], "tokenizer": { "type": "keyword" } } ] }
次のクエリは、 minutes
コレクションのmessage
フィールドでフレーズtry to sign-in
を検索します。
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' }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの keyword
トークナイザを使用して、値 try to sign-in
のトークンを作成したため、結果に _id: 3
を含むドキュメントを返します。 standard
トークナイザを使用してmessage
フィールドをインデックスすると、Atlas 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フィールドに
ngramExample
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンからnGramを選択し、次のフィールドに値を入力します。
フィールド値minGram
4
maxGram
6
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
ngramExample
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "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 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" }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの nGram
トークナイザを使用して、値 week
のトークンを作成したため、結果に _id: 1
を含むドキュメントを返します。 standard
またはedgeGram
トークナイザを使用してtitle
フィールドをインデックス化すると、Atlas Search は検索タームweek
の結果を返しません。
次の表は、 nGram
トークナイザと比較して、 standard
とedgeGram
トークナイザが_id: 1
を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
---|---|
|
|
|
|
|
|
regexCaptureGroup
regexCaptureGroup
トークナイザは、正規表現パターンを照合してトークンを抽出します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| 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" } } ] }
次のクエリは、 minutes
コレクションのpage_updated_by.phone
フィールドで電話番号123-456-9870
を検索します。
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' }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの regexCaptureGroup
トークナイザを使用して、値 123-456-7890
のトークンを作成したため、結果に _id: 3
を含むドキュメントを返します。 standard
トークナイザを使用してpage_updated_by.phone
フィールドをインデックス化すると、Atlas Search は検索ターム123-456-7890
のすべてのドキュメントを返します。
次の表は、 regexCaptureGroup
トークナイザと比較してstandard
トークナイザが_id: 3
を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
---|---|
|
|
|
|
regexSplit
regexSplit
トークナイザは、正規表現ベースの区切り文字でトークンを分割します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| 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" } } ] }
次のクエリは、 minutes
コレクションのpage_updated_by.phone
フィールドで数字9870
を検索します。
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' }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの regexSplit
トークナイザを使用して、値 9870
のトークンを作成したため、結果に _id: 3
を含むドキュメントを返します。 standard
トークナイザを使用してpage_updated_by.phone
フィールドをインデックス化すると、Atlas 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" } } ] }
次のクエリは、 minutes
コレクションのmessage
フィールドでsignature
というタームを検索します。
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 №' }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの standard
トークナイザを使用して、値 signature
のトークンを作成したため、_id: 4
を含むドキュメントを返します。 keyword
トークナイザを使用してmessage
フィールドをインデックス化すると、Atlas Search は検索タームsignature
の結果を返しません。
次の表は、 standard
トークナイザと比較してkeyword
アナライザが_id: 4
を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
---|---|
|
|
|
|
uaxUrlEmail
uaxUrlEmail
トークナイザはURLとメールアドレスをトークン化します。 ただし、uaxUrlEmail
トークナイザは Unicode テキスト分割アルゴリズム の単語の分割ルールに基づいてトークン化しますが、uaxUrlEmail
では、インデックス フィールド値に URL とメールアドレスが含まれている場合にのみ トークナイザを使用することを推奨します。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" } } ] }
次のクエリは、 minutes
コレクションのpage_updated_by.email
フィールドでメールlewinsky@example.com
を検索します。
db.minutes.aggregate([ { "$search": { "text": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "page_updated_by.email": 1 } } ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの uaxUrlEmail
トークナイザを使用して、値 lewinsky@example.com
のトークンを作成したため、結果に _id: 3
を含むドキュメントを返します。 standard
トークナイザを使用してpage_updated_by.email
フィールドをインデックス化すると、Atlas 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" } } ] }
次のクエリは、 minutes
コレクションのpage_updated_by.email
フィールドでexam
というタームを検索します。
db.minutes.aggregate([ { "$search": { "autocomplete": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "page_updated_by.email": 1 } } ])
_id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの uaxUrlEmail
トークナイザを使用して、値 lewinsky@example.com
のトークンを作成したため、結果に _id: 3
を含むドキュメントを返します。 standard
トークナイザを使用してpage_updated_by.email
フィールドをインデックス化すると、Atlas Search は検索タームlewinsky@example.com
のすべてのドキュメントを返します。
次の表は、 uaxUrlEmail
トークナイザと比較してstandard
トークナイザが_id: 3
を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Atlas 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" } } ] }
次のクエリは、 minutes
コレクションのmessage
フィールドでSIGN-IN
というタームを検索します。
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: 2, message: 'do not forget to SIGN-IN' }
Atlas Search Atlas Search 、検索タームに一致するドキュメントの whitespace
トークナイザを使用して、値 SIGN-IN
のトークンを作成したため、結果に _id: 2
を含むドキュメントを返します。 standard
トークナイザを使用してmessage
フィールドをインデックスすると、Atlas Search は検索タームSIGN-IN
に対して_id: 1
、 _id: 2
、 _id: 3
を含むドキュメントを返します。
次の表は、 whitespace
トークナイザと比較してstandard
トークナイザが_id: 2
を含むドキュメントに対して作成するトークンを示しています。
トークナイザ | Token Outputs |
---|---|
|
|
|
|