Docs Menu
Docs Home
/
MongoDB Atlas
/ / / / /

トークナイザ

項目一覧

  • edgeGram
  • 属性
  • keyword
  • 属性
  • nGram
  • 属性
  • regexCaptureGroup
  • 属性
  • regexSplit
  • 属性
  • 標準
  • 属性
  • uaxUrlEmail
  • 属性
  • whitespace
  • 属性

カスタムアナライザのトークナイザは、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トークナイザは、テキスト入力の左側、つまり「エッジ」からの入力を指定されたサイズの 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"
}
}
]
}

次のクエリは、 minutesコレクションのmessageフィールドでtrで始まるテキストを検索します。

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' }

Atlas Search Atlas Search 、検索タームに一致するドキュメントの edgeGram トークナイザを使用して、値 tr のトークンを作成したため、結果に _id: 1_id: 3 を含むドキュメントを返します。 standardトークナイザを使用してmessageフィールドをインデックス化すると、Atlas Search は検索タームtrの結果を返しません。

次の表は、 edgeGramトークナイザと比較してstandardトークナイザが結果内のドキュメントに対して作成するトークンを示しています。

トークナイザ
Token Outputs
standard
try, to, sign, in
edgeGram
tr, try, try{SPACE}, try t, try to, try to{SPACE}

keywordトークナイザは入力全体を単一のトークンとしてトークン化します。 Atlas 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をクリックします。

デフォルトのインデックス定義を以下のように置き換えます。

{
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "keywordExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "keywordExample",
"tokenFilters": [],
"tokenizer": {
"type": "keyword"
}
}
]
}

次のクエリは、 minutesコレクションのmessageフィールドでフレーズtry to sign-inを検索します。

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' }

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
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フィールドにngramExampleと入力します。

  4. Tokenizerが折りたたまれている場合は展開します。

  5. ドロップダウンからnGramを選択し、次のフィールドに値を入力します。

    フィールド
    minGram
    4
    maxGram
    6
  6. Addをクリックして、カスタムアナライザをインデックスに追加します。

  7. Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。

  8. Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。

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

  10. [ 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というタームを検索します。

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

Atlas Search Atlas Search 、検索タームに一致するドキュメントの nGram トークナイザを使用して、値 week のトークンを作成したため、結果に _id: 1 を含むドキュメントを返します。 standardまたはedgeGramトークナイザを使用してtitleフィールドをインデックス化すると、Atlas 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トークナイザは、正規表現パターンを照合してトークンを抽出します。

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

名前
タイプ
必須
説明
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"
}
}
]
}

次のクエリは、 minutesコレクションのpage_updated_by.phoneフィールドで電話番号123-456-9870を検索します。

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' }

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
standard
123, 456.9870
regexCaptureGroup
123-456-9870

regexSplitトークナイザは、正規表現ベースの区切り文字でトークンを分割します。

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

名前
タイプ
必須
説明
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"
}
}
]
}

次のクエリは、 minutesコレクションのpage_updated_by.phoneフィールドで数字9870を検索します。

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' }

Atlas Search Atlas Search 、検索タームに一致するドキュメントの regexSplit トークナイザを使用して、値 9870 のトークンを作成したため、結果に _id: 3 を含むドキュメントを返します。 standardトークナイザを使用してpage_updated_by.phoneフィールドをインデックス化すると、Atlas 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"
}
}
]
}

次のクエリは、 minutesコレクションのmessageフィールドでsignatureというタームを検索します。

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 №' }

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

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

名前
タイプ
必須
説明
type
string
はい
このトークナイザのタイプを識別する、人間が判読できるラベル。 値はuaxUrlEmailである必要があります。
maxTokenLength
整数
no

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

デフォルト: 255

次のインデックス定義は、 basicEmailAddressAnalyzerという名前のカスタムアナライザを使用して、 minutesコレクションのpage_updated_by.emailフィールドをインデックス化します。 uaxUrlEmailトークナイザを使用して、 page_updated_by.emailフィールドのURLとメールアドレスからトークン(検索可能なターム)を作成します。

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

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

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

  4. Tokenizerが折りたたまれている場合は展開します。

  5. ドロップダウンから [uaxUrlEmail] を選択します。

  6. Addをクリックして、カスタムアナライザをインデックスに追加します。

  7. Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailフィールドにカスタムアナライザを適用します。

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

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

  10. [ 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
standard
lewinsky, example.com
uaxUrlEmail
lewinsky@example.com

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

  • トークン化戦略 を持つ オートコンプリート タイプedgeGram

  • URLとメールアドレスからトークン(検索可能なターム)を作成するuaxUrlEmailトークナイザ

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

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

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

  4. Tokenizerが折りたたまれている場合は展開します。

  5. ドロップダウンから [uaxUrlEmail] を選択します。

  6. Addをクリックして、カスタムアナライザをインデックスに追加します。

  7. Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailフィールドにカスタムアナライザを適用します。

  8. Field Nameドロップダウンからpage_update_by.emailを選択し、 Data Typeドロップダウンからオートコンプリートを選択します。

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

  10. [ 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
standard
autocomplete edgeGram
le, lew, lewi, lewin, lewins, lewinsk, lewinsky, lewinsky@, lewinsky, ex, exa, exam, examp, exampl, example, example., example.c, example.co, example.com
uaxUrlEmail
autocomplete edgeGram
le, lew, lewi, lewin, lewins, lewinsk, lewinsky, lewinsky@, lewinsky@e, lewinsky@ex, lewinsky@exa, lewinsky@exam, lewinsky@examp, lewinsky@exampl

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

次のクエリは、 minutesコレクションのmessageフィールドでSIGN-INというタームを検索します。

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: 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
standard
do, not, forget, to, sign, in
whitespace
do, not, forget, to, SIGN-IN

戻る

文字フィルター