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

トークン フィルター

項目一覧

  • as読み取り
  • 属性
  • dwitchMoあります
  • 属性
  • edgeGram
  • 属性
  • englishPassive
  • 属性
  • flattenGraph
  • 属性
  • ic ページ フォールディング
  • 属性
  • icuNormalizer
  • 属性
  • kStemming
  • 属性
  • Length
  • 属性
  • 小文字
  • 属性
  • nGram
  • 属性
  • porterStemming
  • 属性
  • regex
  • 属性
  • 属性
  • 単一選択
  • 属性
  • refresh
  • 属性
  • spanishPluralSteming
  • 属性
  • stempel
  • 属性
  • ストップワード
  • 属性
  • trigger
  • 属性
  • [wordDelimiterGraph]
  • 属性

トークン フィルターは、次のような操作を実行します。

  • ステミング 。これにより、「toring」、「thaled」、「torages」などの関連単語を語幹単語の「torage」に減らします。

  • 編集 : 公開ドキュメントから機密情報を排除します。

トークン フィルターには常にタイプ フィールドが必要であり、一部には追加のオプションも必要です。 構文は次のとおりです。

"tokenFilters": [
{
"type": "<token-filter-type>",
"<additional-option>": <value>
}
]

次のサンプル インデックス定義とクエリでは、 minutesという名前のサンプル コレクションを使用します。 Atlas クラスターのデータベースにminutesコレクションを追加すると、Atlas Search ビジュアル エディターまたは Atlas UI の JSONエディターから次のサンプル インデックスを作成し、このコレクションに対してサンプル クエリを実行できます。 これらのインデックスを作成するには、Atlas UI で希望の構成方法を選択した後、データベースとコレクションを選択し、インデックスを微調整して、トークン フィルターを使用するカスタムアナライザを追加します。

注意

Atlas UI で Visual Editorを使用してカスタムアナライザを追加すると、Atlas UI のCustom Analyzersセクションにアナライザに関する次の詳細が表示されます。

名前

カスタムアナライザを識別するラベル。

で使用される

カスタムアナライザを使用するフィールド。 カスタム アナライザ がフィールドを分析するために使用されない場合、値は[なし]です。

文字フィルター

カスタムアナライザで構成された Atlas Search文字フィルター

トークナイザ

カスタム アナライザ で構成された Atlas Searchトークナイザ

トークン フィルター

カスタムアナライザで構成された Atlas Searchトークン フィルター

アクション

カスタム アナライザで実行できるアクションを示すクリック可能なアイコン。

  • をクリックしますカスタムアナライザを編集します。

  • をクリックしますカスタムアナライザを削除します。

asciiFoldingトークン フィルターは、 基本ラテン Unicode ブロック に含まれていないアルファベット、数字、記号 Unicode 文字を ASCII に変換します(使用可能な場合)。

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

名前
タイプ
必須
説明

type

string

はい

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

originalTokens

string

no

トークン フィルターの出力に元のトークンを含めるか省略するかを指定する string。 値は次のいずれかになります。

  • include - トークン フィルターの出力に変換されたトークンを含む元のトークンを含めます。 元のトークンと変換された形式の両方でクエリをサポートする場合は、この値が推奨されます。

  • omit - 元のトークンを省略し、変換されたトークンのみを トークン フィルター の出力に含めます。 元のトークンの変換された形式のみをクエリする場合は、この値を使用します。

デフォルト: omit

次のインデックス定義は、 asciiConverterという名前のカスタムアナライザを使用して、コレクションのpage_updated_by.first_nameフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. asciiFoldingトークン フィルターを適用して、フィールド値をASCIIと同等に変換します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

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

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

  10. Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.first_nameにカスタムアナライザを適用します フィールドのマルチキー インデックスの図。

  11. [ page_update_by.first_name] を選択します Field Name ドロップダウンからのstringと、Data Type ドロップダウンの string 。

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"dynamic": false,
"fields": {
"page_updated_by": {
"type": "document",
"dynamic": false,
"fields": {
"first_name": {
"type": "string",
"analyzer": "asciiConverter"
}
}
}
}
},
"analyzers": [
{
"name": "asciiConverter",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "asciiFolding"
}
]
}
]
}

次のクエリは、のコレクションのfirst_nameフィールドで、ASCII に相当する名前を使用して名前を検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "Sian",
"path": "page_updated_by.first_name"
}
}
},
{
"$project": {
"_id": 1,
"page_updated_by.last_name": 1,
"page_updated_by.first_name": 1
}
}
])
[
{
_id: 1,
page_updated_by: { last_name: 'AUERBACH', first_name: 'Siân'}
}
]

Atlas Search は結果に_id: 1を含むドキュメントを返します。これは、Atlas Search がドキュメントのpage_updated_by.first_nameフィールドに対して次のトークン(検索可能なターム)を作成し、それがクエリ用語のSianと一致するために使用されたためです。

フィールド名
出力トークン

page_updated_by.first_name

Sian

daitchMokotoffSoundexトークン フィルターは、 デーモン:Moのみに 基づいて同じように発音する単語のトークンを作成します 発音アルゴリズム。このフィルターは、入力ごとに複数のエンコーディングを生成できます。各エンコードされたトークンは6桁の数字です。

注意

次の場合はdaitchMokotoffSoundexトークン フィルターを使用しないでください。

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

名前
タイプ
必須
説明

type

string

はい

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

originalTokens

string

no

トークン フィルターの出力に元のトークンを含めるか省略するかを指定する string。 値は次のいずれかになります。

  • include - トークン フィルターの出力に、エンコードされたトークンを含む元のトークンを含めます。 元のトークンとエンコードされた形式の両方でクエリを実行する場合は、この値をお勧めします。

  • omit - 元のトークンを省略し、トークン フィルターの出力にエンコードされたトークンのみを含めます。 元のトークンのエンコードされた形式に対してのみクエリを実行する場合は、この値を使用します。

デフォルト: include

次のインデックス定義は、 dmsAnalyzerという名前のカスタムアナライザを使用して、コレクションのpage_updated_by.last_nameフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. daitchMokotoffSoundexトークン フィルターを適用して、同じように発音する単語のトークンをエンコードします。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンから [ daitchMokotoffSoundexを選択し、 originalTokensフィールドに次の表に示す値を選択します。

    フィールド

    originalTokens

    include

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

  10. Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.last_nameにカスタムアナライザを適用します フィールドのマルチキー インデックスの図。

  11. [ last_name] ページ_アップデート_バイ.を選択 Field Name ドロップダウンからのstringと、Data Type ドロップダウンの string 。

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"dynamic": false,
"fields": {
"page_updated_by": {
"type": "document",
"dynamic": false,
"fields": {
"last_name": {
"type": "string",
"analyzer": "dmsAnalyzer"
}
}
}
}
},
"analyzers": [
{
"name": "dmsAnalyzer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "daitchMokotoffSoundex",
"originalTokens": "include"
}
]
}
]
}

次のクエリは、コレクションのpage_updated_by.last_nameフィールドでAUERBACHに似たタームを検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "AUERBACH",
"path": "page_updated_by.last_name"
}
}
},
{
"$project": {
"_id": 1,
"page_updated_by.last_name": 1
}
}
])
[
{ "_id" : 1, "page_updated_by" : { "last_name" : "AUERBACH" } }
{ "_id" : 2, "page_updated_by" : { "last_name" : "OHRBACH" } }
]

Atlas Search では、 _id: 1_id: 2を含むドキュメントが返されます。両方のドキュメントのタームは発音的に似ており、同じ 6 桁の数字( 097400097500 )を使用してコード化されているためです。 次の表は、結果内のドキュメントに対して Atlas Search が作成するトークン(検索可能なタームと 6 桁のエンコーディング)を示しています。

ドキュメント ID
出力トークン

"_id": 1

AUERBACH, 097400, 097500

"_id": 2

OHRBACH, 097400, 097500

edgeGramトークン フィルターは、テキスト入力の左側、つまり「エッジ」からの入力を、構成されたサイズの n グラムにトークン化します。

注意

通常、トークン フィルターはパイプラインと同様に動作し、各入力トークンから生成される出力トークンは 1 未満で、その後、後続のトークンに入力されます。 対照的に、 edgeGramトークン フィルターは、単一の入力トークンから複数の出力トークンを生成するグラフを生成するフィルターです。

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

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

名前
タイプ
必須
説明

type

string

はい

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

minGram

integer

はい

生成された n グラムの最小長を指定する数値。 値はmaxGram以下である必要があります。

maxGram

integer

はい

生成された n グラムの最大長を指定する数値。 値はminGram以上である必要があります。

termNotInBounds

string

no

minGramより短いトークンとmaxGramより長いトークンのインデックスを作成するかどうかを指定する string 。 指定できる値は以下のとおりです。

  • include

  • omit

includeが指定されている場合、 minGramより短いトークンまたはmaxGramより長いトークンはそのままでインデックス化されます。 omitが指定されている場合、それらのトークンはインデックス化されません。

デフォルト: omit

次のインデックス定義は、 titleAutocompleteという名前のカスタムアナライザを使用して、コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のフィルターを適用します。

    • icuFolding トークンに文字のたたみを適用する トークン フィルター 。

    • edgeGram トークン フィルターを使用して、左側から 4 ~ 7 文字の長さのトークンを作成します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからicuFoldingを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

    フィールド

    minGram

    4

    maxGram

    7

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

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

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "titleAutocomplete",
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "string",
"analyzer": "titleAutocomplete"
}
}
},
"analyzers": [
{
"name": "titleAutocomplete",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuFolding"
},
{
"type": "edgeGram",
"minGram": 4,
"maxGram": 7
}
]
}
]
}

次のクエリは、コレクションのtitleフィールドで、 meeで始まり、その後に任意の数の他の文字が続くタームを検索します。

db.minutes.aggregate([
{
"$search": {
"wildcard": {
"query": "mee*",
"path": "title",
"allowAnalyzedField": true
}
}
},
{
"$project": {
"_id": 1,
"title": 1
}
}
])
[
{ _id: 1, title: 'The team's weekly meeting' },
{ _id: 3, title: 'The regular board meeting' }
]

Atlas Search では、クエリ条件に一致する用語meetingが含まれているため、 _id: 1_id: 3を含むドキュメントが返されます。 具体的には、Atlas Search は結果内のドキュメントに対して次の 4 から 7 文字のトークン(検索可能なターム)を作成し、クエリ用語のmee*と照合します。

ドキュメント ID
出力トークン

"_id": 1

team, team', team's, week, weekl, weekly, meet, meeti, meetin, meeting

"_id": 3

regu, regul, regula, regular, boar, board, meet, meeti, meetin, meeting

englishPossessiveトークン フィルターは、単語から所有語( 'sの末尾)を削除します。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 englishPossessiveStemmerという名前のカスタムアナライザを使用して、コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、単語割りルールに基づいてトークン(検索ターム)を作成します。

  2. englishPassiveトークン フィルターを適用して、トークンから所有者( 'sの末尾)を削除します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

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

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

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

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

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "englishPossessiveStemmer"
}
}
},
"analyzers": [
{
"name": "englishPossessiveStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "team",
"path": "title"
}
}
},
{
"$project": {
"_id": 1,
"title": 1
}
}
])
[
{
_id: 1,
title: 'The team's weekly meeting'
},
{
_id: 2,
title: 'The check-in with sales team'
}
]

Atlas Search では、 titleフィールドにteamというタームが含まれる結果が返されます。 Atlas Search Atlas Search 、分析中に title フィールドの team's をトークン team に変換するため、_id: 1 を含むドキュメントを返します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語に照合します。

ドキュメント ID
出力トークン

"_id": 1

The, team, weekly, meeting

"_id": 2

The, check, in, with, sales, team

flattenGraphトークンフィルターは、トークンフィルターグラフをインデックス作成に適した平面形式に変換します。 queryGraphトークン フィルターを使用する場合は、 wordDelimiterGraphトークン フィルターの後にこのフィルターを使用します。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 wordDelimiterGraphFlattenというカスタムアナライザを使用して、コレクションのmessageフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. ホワイトスペーストークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。

  2. トークンに次のフィルターを適用します。

    • サブ単語に基づいてトークンを分割し、元の単語のトークンを生成し、単語SIGN_INを区切り文字から保護するstringフィルターです。

    • トークンを平面形式にフラット化するためのflattenGraphトークン フィルター。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからwordDelimiterGraphを選択し、トークン フィルターに次のフィールドを構成します。

    1. 次のフィールドを選択します。

      フィールド

      delimiterOptions.generateWordParts

      true

      delimiterOptions.preserveOriginal

      true

    2. protectedWords.wordsフィールドにSIGN_INと入力します。

    3. protectedWords.ignoreCase を選択します。

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

  11. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  12. カスタムアナライザを作成するには、 Addをクリックします。

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

  14. Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。

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

  16. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "wordDelimiterGraphFlatten"
}
}
},
"analyzers": [
{
"name": "wordDelimiterGraphFlatten",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "wordDelimiterGraph",
"delimiterOptions" : {
"generateWordParts" : true,
"preserveOriginal" : true
},
"protectedWords": {
"words": [
"SIGN_IN"
],
"ignoreCase": false
}
},
{
"type": "flattenGraph"
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "sign",
"path": "message"
}
}
},
{
"$project": {
"_id": 1,
"message": 1
}
}
])
[
{
_id: 3,
message: 'try to sign-in'
}
]

Atlas Search では、ドキュメントのtitleフィールドにハイフン付きのタームsign-inが含まれている場合でも、クエリタームsignの結果に_id: 3を含むドキュメントが返されます。 wordDelimiterGraphトークン フィルターはトークン フィルター グラフを作成し、 flattenGraphトークン フィルターはトークン フィルター グラフをインデックスに適した平面形式に変換します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語のsignに照合します。

ドキュメント ID

出力トークン

_id: 3

try, to, sign-in, sign, in

トークン フィルターはicuFolding Unicode テクニカル レポート #30 の文字フォールディングを適用します 、アクセントの削除、大文字と小文字のフォールディング、標準の重複のフォールディングなど、レポートで詳細に説明されている多くの

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 diacriticFolderという名前のカスタムアナライザを使用して、コレクションのtext.sv_FIフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. キーワード トークナイザを適用して、string フィールド内のすべてのタームを 1 つのタームとしてトークン化します。

  2. icuFoldingトークン フィルターを使用して、アクセント削除、大文字と小文字のフォールディング、標準重複のフォールディングなどのフォールディングを適用します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

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

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

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

  11. text.sv_FI を選択します Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "diacriticFolder",
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"sv_FI": {
"analyzer": "diacriticFolder",
"type": "string"
}
}
}
}
},
"analyzers": [
{
"name": "diacriticFolder",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "icuFolding"
}
]
}
]
}

次のクエリでは、ワイルドカード演算子を使用して、コレクションのtext.sv_FIフィールドで、 avdelningの前に任意の数の他の文字が続くタームを含むすべてのタームが検索されます。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"wildcard": {
"query": "*avdelning*",
"path": "text.sv_FI",
"allowAnalyzedField": true
}
}
},
{
"$project": {
"_id": 1,
"text.sv_FI": 1
}
}
])
[
{
_id: 1,
text: { sv_FI: 'Den här sidan behandlar avdelningsmöten' }
},
{
_id: 2,
text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' }
}
]

Atlas Search では、結果に_id: 1_id: 2を含むドキュメントが返されます。ドキュメントにはクエリ用語としてavdelningを含むドキュメント内の他の文字が含まれ、その後に_id: 1を含むドキュメント内の他の文字が含まれ、その後に_id: 2を含むドキュメント内の他の文字が続くためです。 . 具体的には、Atlas Search は結果内のドキュメントに対して次のトークンを作成し、クエリ用語*avdelning*に一致させます。

ドキュメント ID
出力トークン

_id: 1

den har sidan behandlar avdelningsmoten

_id: 2

forst talade chefen for forsaljningsavdelningen

トークン フィルターは、標準のicuNormalizer Unicode 正規化モードを使用してトークンを正規化します。

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

名前
タイプ
必須
説明

type

string

はい

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

normalizationForm

string

no

適用される正規化形式。 指定できる値は以下のとおりです。

  • nfd (標準除算)

  • nfc (標準分割とそれに続く標準構成)

  • nfkd (互換性の縮小)

  • nfkc (互換性分割とそれに続く標準構成)

サポートされている正規化形式の詳細については、 セクション 1.2: 正規化形式、UTR#15 を参照してください。

デフォルト: nfc

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

  1. ホワイトスペース トークナイザ を使用して、単語間の空白の発生に基づいてトークンを作成します。

  2. icuNormalizerトークンフィルターを使用して、互換性分割、その後に標準構成によってトークンを正規化します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンから [ icuNormalizerを選択し、 normalizationFormドロップダウンから [ nfkc ] を選択します。

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

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

  11. Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "textNormalizer",
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "textNormalizer"
}
}
},
"analyzers": [
{
"name": "textNormalizer",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "icuNormalizer",
"normalizationForm": "nfkc"
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "1",
"path": "message"
}
}
},
{
"$project": {
"_id": 1,
"message": 1
}
}
])
[ { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]

Atlas Search では、ドキュメントターム1の結果に_id: 2が含まれるドキュメントが返されます。ドキュメントのmessageフィールドに丸められた数字が含まれていても、 icuNormalizerトークンフィルタは 用のトークン1を作成するためです。 nfkc正規化形式を使用するこの文字。 次の表は、 nfkc正規化形式を使用して結果内のドキュメント用に Atlas Search が作成するトークン(検索可能なターム)と、他の正規化形式用に作成されるトークンを示しています。

正規化形式

出力トークン

マッチ 1

nfd

do, not, forget, to, SIGN-IN., See, , for, details.

X

nfc

do, not, forget, to, SIGN-IN., See, , for, details.

X

nfkd

do, not, forget, to, SIGN-IN., See, 1, for, details.

nfkc

do, not, forget, to, SIGN-IN., See, 1, for, details.

kStemmingトークン フィルターは、アルゴリズム ステミングと英語の組み込み辞書を組み合わせて、単語のステミングを行います。 小文字のテキストを要求し、大文字のテキストは変更されません。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 kStemmerという名前のカスタムアナライザを使用して、コレクションのtext.en_USフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のフィルターを適用します。

    • トークンを小文字に変換する小文字トークン フィルター 。

    • アルゴリズム語幹と英語の組み込み辞書の組み合わせを使用して、単語を語幹するためのkStemingトークン フィルター です。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. text.en_US を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "kStemmer",
"mappings": {
"dynamic": true
},
"analyzers": [
{
"name": "kStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "kStemming"
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "Meeting",
"path": "text.en_US"
}
}
},
{
"$project": {
"_id": 1,
"text.en_US": 1
}
}
])
[
{
_id: 1,
text: {
en_US: '<head> This page deals with department meetings. </head>'
}
}
]

Atlas Search では、小文字の複数形のタームmeetingsが含まれる_id: 1を含むドキュメントが返されます。 Atlas Search がクエリ用語をドキュメントに照合するのは、小文字トークン フィルターがトークン テキストを小文字に正規化し、 kStemingトークン フィルターを使用すると Atlas Search がドキュメントのtext.en_USフィールドの複数形のmeetingsを単数形のクエリ用語と照合するためです。 Atlas Search は、インデックス アナライザ(または指定されている場合はsearchAnalyzerを使用)を使用してクエリ用語を分析します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語に一致させるために使用します。

head, this, page, deal, with, department, meeting, head

lengthトークン フィルターは、長すぎる または 短いトークンを排除します。

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

名前
タイプ
必須
説明

type

string

はい

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

min

integer

no

トークンの最小長を指定する数値。 値はmax以下である必要があります。

デフォルト: 0

max

integer

no

トークンの最大長を指定する数値。 値はmin以上である必要があります。

デフォルト: 255

次のインデックス定義は、 longOnlyという名前のカスタムアナライザを使用して、コレクションのtext.sv_FIフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を使用して、単語の置き換えルールに基づいてトークンを作成します。

  2. トークンに次のフィルターを適用します。

    • 文字のフォールディングを適用するための ic間にフォールディングトークン フィルターを使用します。

    • length トークンフィルターを使用して、トークン化後の長さが少なくとも 20 UTF-16 コード ユニットであるトークンのみをインデックスします。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからicuFoldingを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  9. ドロップダウンからlengthを選択し、トークン フィルターに次のフィールドを構成します。

    フィールド

    min

    20

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. Field Nameドロップダウンからネストされたtext.sv.FIedを選択し、 Data Typeドロップダウンからstringを選択します。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"text": {
"type": "document",
"dynamic": true,
"fields": {
"sv_FI": {
"type": "string",
"analyzer": "longOnly"
}
}
}
}
},
"analyzers": [
{
"name": "longOnly",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuFolding"
},
{
"type": "length",
"min": 20
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "forsaljningsavdelningen",
"path": "text.sv_FI"
}
}
},
{
"$project": {
"_id": 1,
"text.sv_FI": 1
}
}
])
[
{
_id: 2,
text: {
sv_FI: 'Först talade chefen för försäljningsavdelningen'
}
}
]

Atlas Search では、用語försäljningsavdelningenを含む_id: 2を含むドキュメントが返されます。 Atlas Search は、タームが 20 文字を超えるため、ドキュメントをクエリタームと照合します。 さらに、クエリ用語forsaljningsavdelningenには発音区別文字が含まれていませんが、Atlas Search はドキュメント内の元のタームの発音区別記号を折りたたことで、クエリタームをドキュメントと照合します。 具体的には、Atlas Search は、 _id: 2を持つドキュメントに対して次のトークン(検索可能なターム)を作成します。

forsaljningsavdelningen

Atlas Search では、コレクションのtext.sv_FIフィールド内の他のタームを検索しても結果は返されません。フィールド内の他のタームはすべて 20 文字未満であるためです。

lowercaseトークンフィルターは、トークンテキストを小文字に正規化します。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義の例では、 nGramトークン化戦略を使用して、コレクションのtitleフィールドをタイプオートコンプリートとしてインデックス化します。 titleフィールドにkeywordLowererという名前のカスタムアナライザが適用されます。 カスタムアナライザは、以下を指定します。

  1. キーワードトークナイザ を適用して、string または string の配列用の単一のトークンを作成します。

  2. lowercaseトークンフィルターを適用して、トークンテキストを小文字に変換します。

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

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

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

  4. Tokenizerが折りたたまれている場合は展開し、ドロップダウンからkeywordを選択します。

  5. Token Filtersを展開し、 をクリックしますAdd token filter

  6. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

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

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

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

    プロパティ名

    Analyzer

    keywordLowerer

    Tokenization

    nGram

  10. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"title": {
"analyzer": "keywordLowerer",
"tokenization": "nGram",
"type": "autocomplete"
}
}
},
"analyzers": [
{
"name": "keywordLowerer",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "lowercase"
}
]
}
]
}

次のクエリは、オートコンプリート演算子を使用してtitleフィールドで文字standupを検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"autocomplete": {
"query": "standup",
"path": "title"
}
}
},
{
"$project": {
"_id": 1,
"title": 1
}
}
])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]

Atlas Search では、ドキュメントにクエリ用語としてstandupが含まれているため、結果に_id: 4を含むドキュメントが返されます。 Atlas Search は、 keywordトークナイザ、 lowercaseトークンフィルタ、オートコンプリートタイプのnGramトークン化戦略を使用して、 titleフィールドのトークンを作成します。 具体的には、Atlas Search はkeywordトークナイザを使用して string 全体を単一のトークンとしてトークン化し、string 全体の完全一致のみをサポートし、次にlowercaseトークンフィルターを使用してトークンを小文字に変換します。 結果内のドキュメント用に、Atlas Search は カスタム アナライザ を使用して次のトークンを作成します。

ドキュメント ID

出力トークン

_id: 4

the daily huddle on the standupapp2

カスタム アナライザを適用すると、Atlas Search は n グラムのさらにトークンを作成します。Atlas Search はインデックス定義で指定されたオートコンプリートタイプとしてtitleフィールドをインデックス化するためです。 Atlas Search は、ドキュメントをクエリ用語standupに照合するために、 standupのトークンを含む n グラムのトークンを使用します。

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

  1. 標準のトークナイザを適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のフィルターを適用します。

    • 標準の Unicode 正規化モードを使用してトークンを正規化するためのicuNormalizer

    • lowercase トークン テキストを小文字に変換する トークン フィルター 。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンから [ icuNormalizerを選択し、 normalizationFormドロップダウンから [ nfkd ] を選択します。

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

  11. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  12. カスタムアナライザを作成するには、 Addをクリックします。

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

  14. Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。

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

  16. [ Addをクリックし、 Save Changesをクリックします。

{
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "lowerCaser"
}
}
},
"analyzers": [
{
"name": "lowerCaser",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuNormalizer",
"normalizationForm": "nfkd"
},
{
"type": "lowercase"
}
]
}
]
}

次のクエリは、message フィールドで sign-in というタームを検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "sign-in",
"path": "message"
}
}
},
{
"$project": {
"_id": 1,
"message": 1
}
}
])
[
{ _id: 1, message: 'try to siGn-In' },
{ _id: 3, message: 'try to sign-in' },
{ _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' }
]

Atlas Search では、クエリ用語sign-inの結果に_id: 1_id: 3_id: 2を含むドキュメントが返されます。これは、 icuNormalizerトークナイザが最初にハイフン付きの単語を含むテキストを分割して個別のトークンを作成するが、 を保持するためです。ドキュメント内の元の文字大文字と小文字を区別し、 lowercaseトークンフィルターがトークンを小文字に変換します。 Atlas Search では、 インデックス アナライザ (または指定されている場合はsearchAnalyzerを使用)を使用してクエリ用語を分析し、クエリ用語を分割し、それをドキュメントと照合します。

正規化形式

出力トークン

_id: 1

try, to, sign, in

_id: 3

try, to, sign, in

_id: 2

do, not, forget, to, sign, in, see, for, details

nGramトークン フィルターは、入力を設定されたサイズの n グラムにトークン化します。 シノニム (同意語) または オートコンプリート マッピング定義では nGram トークン フィルターは使用できません。

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

名前
タイプ
必須
説明

type

string

はい

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

minGram

integer

はい

生成された n グラムの最小長を指定する数値。 値はmaxGram以下である必要があります。

maxGram

integer

はい

生成された n グラムの最大長を指定する数値。 値はminGram以上である必要があります。

termNotInBounds

string

no

minGramより短いトークンとmaxGramより長いトークンのインデックスを作成するかどうかを指定する string 。 指定できる値は以下のとおりです。

  • include

  • omit

includeが指定されている場合、 minGramより短いトークンまたはmaxGramより長いトークンはそのままでインデックス化されます。 omitが指定されている場合、それらのトークンはインデックス化されません。

デフォルト: omit

次のインデックス定義は、 titleAutocompleteという名前のカスタムアナライザを使用して、コレクションのtitleフィールドをインデックス化します。 カスタムアナライザ関数は、以下を指定します。

  1. 標準のトークナイザを適用して、単語の指定ルールに基づいてトークンを作成する。

  2. トークンに一連のトークンフィルターを適用します。

    • englishPossessive 単語から所有語( 'sの末尾)を削除します。

    • nGram 単語を長さが 4 ~ 7 文字にトークン化します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからenglishPossessiveを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  9. ドロップダウンからnGramを選択し、トークン フィルターに次のフィールドを構成します。

    フィールド

    minGram

    4

    maxGram

    7

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

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

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "titleAutocomplete"
}
}
},
"analyzers": [
{
"name": "titleAutocomplete",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
},
{
"type": "nGram",
"minGram": 4,
"maxGram": 7
}
]
}
]
}

次のクエリでは、ワイルドカード演算子を使用して、コレクションのtitleフィールドでmeetというタームを検索し、その後に任意の数の他の文字が続く検索を行います。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"wildcard": {
"query": "meet*",
"path": "title",
"allowAnalyzedField": true
}
}
},
{
"$project": {
"_id": 1,
"title": 1
}
}
])
[
{ _id: 1, title: 'The team's weekly meeting' },
{ _id: 3, title: 'The regular board meeting' }
]

Atlas Search は、 _id: 1_id: 3を含むドキュメントを返します。ドキュメントにはmeetingというタームが含まれているためです。Atlas Search は次のトークン(検索可能なターム)を作成することでクエリ条件meet*に一致します。

正規化形式
出力トークン

_id: 2

team, week, weekl, weekly, eekl, eekly, ekly, meet, meeti, meetin, meeting, eeti, eeti, eeting, etin, eting, ting

_id: 3

regu, regul, regula, regular, egul, egula, egular, gula, gular, ular, boar, board, oard, meet, meeti, meetin, meeting, eeti, eeti, eeting, etin, eting, ting

注意

Atlas Search では、 termNotInBoundsパラメータがデフォルトでomitに設定されているため、4 文字未満( theなど)および 7 文字を超えるタームのトークンは作成されません。 termNotInBoundsパラメータの値をincludeに設定すると、Atlas Search はtheというタームのトークンも作成します。

porterStemming これは小文字のテキストを要求し、大文字のテキストの場合は期待どおりに動作しません。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 porterStemmerという名前のカスタムアナライザを使用して、コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のトークン フィルターを適用します。

    • 小文字のトークン フィルター を使用して、単語を小文字に変換します。

    • 単語から一般的な語形接尾辞、または語形接尾辞を削除するためのporterStemingトークン フィルター。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

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

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "porterStemmer"
}
}
},
"analyzers": [
{
"name": "porterStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "porterStemming"
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "Meet",
"path": "title"
}
}
},
{
"$project": {
"_id": 1,
"title": 1
}
}
])
[
{
_id: 1,
title: 'The team's weekly meeting'
},
{
_id: 3,
title: 'The regular board meeting'
}
]

Atlas Search では、 _id: 1_id: 3を含むドキュメントが返されます。これは、小文字のトークンフィルターがトークンテキストを小文字に正規化し、次にporterStemmingトークンフィルターがmeetingトークンから構成要素のサフィックスを派生してmeetトークンを作成するためです。 Atlas Search がクエリ用語Meetに一致します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語のMeetと照合します。

正規化形式
出力トークン

_id: 1

the, team', weekli, meet

_id: 3

the, regular, board, meet

regex トークン フィルターは、各トークンに正規表現を適用し、指定されたstringと一致させます。

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

名前
タイプ
必須
説明

type

string

はい

このトークン フィルターを識別する、人間が判読できるラベル。 値はregexである必要があります。

pattern

string

はい

各トークンに適用する正規表現パターン。

replacement

string

はい

一致するパターンが発生するたびに置き換える置換string 。

トークンを無視または削除するには、空の文字列("" )を指定すると、Atlas Search は代わりに空の文字列を含むトークンを作成します。空の文字列を持つトークンを削除するには、 トークン フィルターの後に ストップワード トークンregex フィルターを使用します。 (例: )。

"analyzers": [
{
"name": "custom.analyzer.name",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"matches": "all",
"pattern": "^(?!\\$)\\w+",
"replacement": "",
"type": "regex"
},
{
"type": "stopword",
"tokens": [""]
}
]
}
]

matches

string

はい

指定できる値は以下のとおりです。

  • all

  • first

matchesallに設定されている場合は、一致するパターンをすべて置き換えます。 それ以外の場合は、最初に一致するパターンのみを置き換えます。

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

  1. キーワード トークナイザを適用して、フィールド値内のすべての単語を 1 つのタームとしてインデックスします。

  2. トークンに次のトークン フィルターを適用します。

    • 小文字のトークン フィルター を使用して、トークン内の大文字を小文字に変換します。

    • regex トークン フィルターを使用して、トークン内のメールアドレスに似た文字列を検索し、 redactedという単語に置き換えます。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  9. ドロップダウンからregexを選択し、トークン フィルターに以下を構成します。

    1. patternフィールドに^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$と入力します。

    2. replacementフィールドにredactedと入力します。

    3. matchesドロップダウンからallを選択します。

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. Field Nameドロップダウンからネストされたpage_update_by.emailData Typeドロップダウンからのstringを選択します。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"page_updated_by": {
"type": "document",
"fields": {
"email": {
"type": "string",
"analyzer": "emailRedact"
}
}
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "emailRedact",
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"matches": "all",
"pattern": "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$",
"replacement": "redacted",
"type": "regex"
}
]
}
]
}

次のクエリは、page_updated_by.email ワイルドカード 演算子を使用して、 のコレクション内の フィールドで、example.com の前に任意の数の他の文字が続くタームを検索します。

1db.minutes.aggregate([
2 {
3 "$search": {
4 "index": "default",
5 "wildcard": {
6 "query": "*example.com",
7 "path": "page_updated_by.email",
8 "allowAnalyzedField": true
9 }
10 }
11 },
12 {
13 "$project": {
14 "_id": 1,
15 "page_updated_by.email": 1
16 }
17 }
18])

Atlas Search ではクエリ結果は返されませんが、 page_updated_by.emailフィールドではメールアドレスにexample.comという単語が含まれています。 Atlas Search Atlas Search 、カスタムアナライザに提供された正規表現に一致する文字列を redacted という単語でトークン化するため、クエリ用語はどのドキュメントにも一致しません。

reverseトークン フィルターは、各 string トークンを逆にします。

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

名前
タイプ
必須
説明

type

string

はい

このトークン フィルターを識別する、人間が判読できるラベル。 値はreverseである必要があります。

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

  • キーワード トークナイザを適用して、文字列全体を単一のタームとしてトークン化します。

  • string トークンを逆にするには、 reverseトークンフィルターを適用します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

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

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

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

  11. Field Nameドロップダウンからネストされたpage_update_by.emailData Typeドロップダウンからのstringを選択します。

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "lucene.keyword",
"mappings": {
"dynamic":
},
"analyzers": [
{
"name": "keywordReverse",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "reverse"
}
]
}
]
}

次のクエリは、page_updated_by.email ワイルドカード 演算子を使用して コレクションの フィールドで、逆の順序で文字@example.com に先行する文字と一致するものを検索します。reverseトークン フィルターにより、先頭のワイルドカード クエリを高速化できます。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"wildcard": {
"query": "*@example.com",
"path": "page_updated_by.email",
"allowAnalyzedField": true
}
}
},
{
"$project": {
"_id": 1,
"page_updated_by.email": 1,
}
}
])

上記のクエリでは、Atlas Search は ワイルドカード クエリにカスタムアナライザ を適用して、クエリを次のように変換します。

moc.elpmaxe@*

次に、Atlas Search はインデックス付きトークンに対してクエリを実行します。これも逆方向です。 このクエリでは次のドキュメントが返されます。

[
{ _id: 1, page_updated_by: { email: 'auerbach@example.com' } },
{ _id: 2, page_updated_by: { email: 'ohrback@example.com' } },
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } },
{ _id: 4, page_updated_by: { email: 'levinski@example.com' } }
]

具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語のmoc.elpmaxe@*に照合します。

正規化形式
出力トークン

_id: 1

moc.elpmaxe@hcabreua

_id: 2

moc.elpmaxe@kcabrho

_id: 3

moc.elpmaxe@yksniwel

_id: 4

moc.elpmaxe@iksnivel

shingleトークン フィルターは、一連のトークンからシングルスディング(トークン n グラム)を構築します。 シノニムまたはオートコンプリートマッピング定義ではshingleトークン フィルターは使用できません。

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

名前
タイプ
必須
説明

type

string

はい

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

minShingleSize

integer

はい

シングルあたりのトークンの最小数。2 以上、maxShingleSize 以下である必要があります。

maxShingleSize

integer

はい

1 秒あたりのトークンの最大数。 minShingleSize以上である必要があります。

コレクションのpage_updated_by.emailフィールドの次のインデックス定義例では、2 つのカスタムアナライザであるemailAutocompleteIndexemailAutocompleteSearchを使用して、オートコンプリートのような機能を実装しています。 Atlas Search は、インデックス作成中にemailAutocompleteIndexアナライザを使用して次のようにします。

  • フィールド内の@文字をATに置き換え

  • ホワイトスペーストークナイザを使用したトークンの作成

  • シングル トークン

  • これらのチャンクされたトークンのedgeGramを作成します

Atlas Search は、検索中にemailAutocompleteSearchアナライザを使用して次のことを行います。

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

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

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

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

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

  6. 次のキーと値を入力します。

    キー

    @

    AT

  7. Add character filterをクリックして、文字フィルターをカスタムアナライザに追加します。

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

  9. ドロップダウンから [ whitespaceを選択し、 maxTokenLengthフィールドに15を入力します。

  10. Token Filtersを展開し、 をクリックしますAdd token filter

  11. ドロップダウンからshingleを選択し、次のフィールドを設定します。

    フィールド
    フィールド値

    minShingleSize

    2

    minShingleSize

    3

  12. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  13. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  14. ドロップダウンからedgeGramを選択し、トークン フィルターに次のフィールドを構成します。

    フィールド
    フィールド値

    minGram

    2

    maxGram

    15

  15. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

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

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

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

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

  20. Character Filtersを展開し、 をクリックしますAdd character filter

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

  22. 次のキーと値を入力します。

    キー

    @

    AT

  23. Add character filterをクリックして、文字フィルターをカスタムアナライザに追加します。

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

  25. ドロップダウンから [ whitespaceを選択し、 maxTokenLengthフィールドに15を入力します。

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

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

  28. Field Nameドロップダウンからネストされたpage_update_by.emailData Typeドロップダウンからのstringを選択します。

  29. データ型のプロパティ セクションで、 Index Analyzerドロップダウンから [ emailAutocompleteIndexを選択し、 Search Analyzerドロップダウンから [ emailAutocompleteSearch ] を選択します。

  30. [ Addをクリックし、 Save Changesをクリックします。

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

1{
2 "analyzer": "lucene.keyword",
3 "mappings": {
4 "dynamic": true,
5 "fields": {
6 "page_updated_by": {
7 "type": "document",
8 "fields": {
9 "email": {
10 "type": "string",
11 "analyzer": "emailAutocompleteIndex",
12 "searchAnalyzer": "emailAutocompleteSearch"
13 }
14 }
15 }
16 }
17 },
18 "analyzers": [
19 {
20 "name": "emailAutocompleteIndex",
21 "charFilters": [
22 {
23 "mappings": {
24 "@": "AT"
25 },
26 "type": "mapping"
27 }
28 ],
29 "tokenizer": {
30 "maxTokenLength": 15,
31 "type": "whitespace"
32 },
33 "tokenFilters": [
34 {
35 "maxShingleSize": 3,
36 **** "minShingleSize": 2,
37 "type": "shingle"
38 },
39 {
40 "maxGram": 15,
41 "minGram": 2,
42 "type": "edgeGram"
43 }
44 ]
45 },
46 {
47 "name": "emailAutocompleteSearch",
48 "charFilters": [
49 {
50 "mappings": {
51 "@": "AT"
52 },
53 "type": "mapping"
54 }
55 ],
56 "tokenizer": {
57 "maxTokenLength": 15,
58 "type": "whitespace"
59 }
60 }
61 ]
62}

次のクエリは、コレクションのpage_updated_by.emailフィールドでメールアドレスを検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "auerbach@ex",
"path": "page_updated_by.email"
}
}
},
{
"$project": {
"_id": 1,
"page_updated_by.email": 1
}
}
])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]

Atlas Search はemailAutocompleteSearchアナライザを使用して検索トークンを作成し、 emailAutocompleteIndexアナライザを使用して作成したインデックス トークンと照合します。 次の表は、Atlas Search が作成する検索トークンとインデックス トークン(最大 15 文字)を示しています。

検索トークン
Index Tokens

auerbachATexamp

au, aue, auer, auerb, auerba, auerbac, auerbach, auerbachA, auerbachAT, auerbachATe, auerbachATex, auerbachATexa, auerbachATexam, auerbachATexamp

snowballStemmingトークンは、 Snowball で生成されたステマーを使用してステミング トークンをフィルタリングします。

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

名前
タイプ
必須
説明

type

string

はい

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

stemmerName

string

はい

次の値が有効です。

  • arabic

  • armenian

  • basque

  • catalan

  • danish

  • dutch

  • english

  • estonian

  • finnish

  • french

  • german

  • german2 (代替のジャーナル言語ステマー。 ほとんどのコンテキストで ー を ue に展開することで、ullaut を処理します)。

  • hungarian

  • irish

  • italian

  • kp (オランダ語の代替ステマーであるKlasj-Poolman ステマー)。

  • lithuanian

  • lovins (初めて公開された "Lows JB" ステミング アルゴリズム。)

  • norwegian

  • porter (元の Porter の英語のステミング アルゴリズム)

  • portuguese

  • romanian

  • russian

  • spanish

  • swedish

  • turkish

次のインデックス定義は、 frenchStemmerという名前のカスタムアナライザを使用して、コレクションのtext.fr_CAフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のトークン フィルターを適用します。

    • トークンを小文字に変換する小文字トークン フィルター 。

    • french snowballStemmingの バリアント トークン フィルター を使用して、単語のステミングを行います。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  9. ドロップダウンから [ snowballStemmingを選択し、 stemmerNameドロップダウンから [ french ] を選択します。

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. text.fr_CA を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"fr_CA": {
"type": "string",
"analyzer": "frenchStemmer"
}
}
}
}
},
"analyzers": [
{
"name": "frenchStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "snowballStemming",
"stemmerName": "french"
}
]
}
]
}

次のクエリは、コレクションのtext.fr_CAフィールドでréunionというタームを検索します。

db.minutes.aggregate([
{
"$search": {
"text": {
"query": "réunion",
"path": "text.fr_CA"
}
}
},
{
"$project": {
"_id": 1,
"text.fr_CA": 1
}
}
])
[
{
_id: 1,
text: { fr_CA: 'Cette page traite des réunions de département' }
}
]

Atlas Search では、結果に_id: 1を含むドキュメントが返されます。 Atlas Search がクエリ用語をドキュメントに照合するのは、クエリ用語がréunionと一致するために使用されるドキュメント用に次のトークンが作成されるためです。

ドキュメント ID
出力トークン

_id: 1

cet, pag, trait, de, réunion, de, départ

spanishPluralStemmingトークンフィルターは、スペイン語の複数形の単語を語幹にしています。 小文字のテキストが必要です。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 spanishPluralStemmerという名前のカスタムアナライザを使用して、コレクションのtext.es_MXフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のトークン フィルターを適用します。

    • スペイン語のタームを小文字に変換する小文字のトークン フィルター。

    • spanishPluralStemming トークン フィルターを使用して、トークン内の複数のスペイン語の単語を単数形の形式にステミングします。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. text.es_TX を選択します Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "spanishPluralStemmer",
"mappings": {
"fields": {
"text: {
"type": "document",
"fields": {
"es_MX": {
"analyzer": "spanishPluralStemmer",
"searchAnalyzer": "spanishPluralStemmer",
"type": "string"
}
}
}
}
},
"analyzers": [
{
"name": "spanishPluralStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "spanishPluralStemming"
}
]
}
]
}

次のクエリは、コレクションのtext.es_MXフィールドでスペイン語のタームpuntoを検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "punto",
"path": "text.es_MX"
}
}
},
{
"$project": {
"_id": 1,
"text.es_MX": 1
}
}
])
[
{
_id: 4,
text : {
es_MX: 'La página ha sido actualizada con los puntos de la agenda.',
}
}
]

Atlas Search では、ドキュメント内のtext.es_MXフィールドに複数形のタームpuntosが含まれているため、 _id: 4を含むドキュメントが返されます。 Atlas Search は、タームから複数形( s )を語幹によりpuntospuntoとして分析するため、Atlas Search はクエリ用語puntoにこのドキュメントを照合します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語に一致させるために使用します。

ドキュメント ID

出力トークン

_id: 4

la, pagina, ha, sido, actualizada, con, los, punto, de, la, agenda

トークン フィルターは Lucene の デフォルトのポリゴンstempel ステマー テーブル を使用します ポーランド語の単語の語幹を操作します。小文字のテキストが必要です。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 stempelStemmerという名前のカスタムアナライザを使用して、コレクションのtext.pl_PLフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. 標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。

  2. トークンに次のフィルターを適用します。

    • 小文字のトークン フィルター を使用して、単語を小文字に変換します。

    • ポーランド語のステミングを保持するためのステミングトークン フィルター。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

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

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. text.pl_PL を選択します Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"analyzer": "stempelStemmer",
"mappings": {
"dynamic": true,
"fields": {
"text.pl_PL": {
"analyzer": "stempelStemmer",
"searchAnalyzer": "stempelStemmer",
"type": "string"
}
}
},
"analyzers": [
{
"name": "stempelStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "stempel"
}
]
}
]
}

次のクエリは、コレクションのtext.pl_PLフィールドでポーランド語のpunktを検索します。

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "punkt",
"path": "text.pl_PL"
}
}
},
{
"$project": {
"_id": 1,
"text.pl_PL": 1
}
}
])
[
{
_id: 4,
text: {
pl_PL: 'Strona została zaktualizowana o punkty porządku obrad.'
}
}
]

Atlas Search では、ドキュメント内のtext.pl_PLフィールドに複数形のタームpunktyが含まれているため、 _id: 4を含むドキュメントが返されます。 Atlas Search は、タームから複数形( y )を語幹によりpunktypunktとして分析するため、Atlas Search はクエリ用語punktにこのドキュメントを照合します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語に照合します。

ドキュメント ID
出力トークン

_id: 4

strona, zostać, zaktualizować, o, punkt, porządek, obrada

stopwordトークンフィルターは、指定されたストップワードに対応するトークンを削除します。 このトークン フィルターは、指定されたストップワードは分析しません。

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

名前
タイプ
必須
説明

type

string

はい

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

tokens

文字列の配列

はい

削除するトークンに対応するストップワードを含むリスト。 値は 1 つ以上のストップワードである必要があります。

ignoreCase

ブール値

no

削除するトークンをフィルタリングするときに、ストップワードの大文字と小文字を無視するかどうかを示すフラグ。 値は次のいずれかになります。

  • true - 大文字と小文字を無視し、指定されたストップワードに一致するすべてのトークンを削除します

  • false - 大文字と小文字を区別し、指定された大文字と小文字を完全に一致するトークンのみを削除します

デフォルト: true

次のインデックス定義は、 stopwordRemoverという名前のカスタムアナライザを使用して、コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. ホワイトスペース トークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。

  2. stopwordトークン フィルターを適用して、定義されたストップワードistheatに一致するトークンを削除します。 トークン フィルターは大文字と小文字を区別せず、指定されたストップワードに一致するすべてのトークンを削除します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンから [ stopwordを選択し、 tokensフィールドに以下を入力します。

    is, the, at

  8. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  9. カスタムアナライザを作成するには、 Addをクリックします。

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

  11. text.en_US を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  13. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"text": {
"type" : "document",
"fields": {
"en_US": {
"type": "string",
"analyzer": "stopwordRemover"
}
}
}
}
},
"analyzers": [
{
"name": "stopwordRemover",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "stopword",
"tokens": ["is", "the", "at"]
}
]
}
]
}

次のクエリは、のコレクションのtext.en_USフィールドでフレーズhead of the salesを検索します。

1db.minutes.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "query": "head of the sales",
6 "path": "text.en_US"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "text.en_US": 1
14 }
15 }
16])
1[
2 {
3 _id: 2,
4 text: { en_US: 'The head of the sales department spoke first.' }
5 }
6]

Atlas Search では、 en_USフィールドにクエリ用語が含まれているため、 _id: 2を含むドキュメントが返されます。 Atlas Search は分析中にドキュメント内のストップワードtheのトークンを作成しませんが、クエリ用語に一致させることができます。これは、 stringフィールドでは、インデックス アナライザ(または( searchAnalyzerを使用して)を指定し、クエリ用語からストップワードを削除することで、Atlas Search はクエリ用語をドキュメントに照合できるようになります。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークンを作成します。

ドキュメント ID
出力トークン

_id: 2

head, of, sales, department, spoke, first.

trimトークン フィルターは、トークンから先頭と末尾の空白を削除します。

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

名前
タイプ
必須
説明

type

string

はい

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

次のインデックス定義は、 tokenTrimmerという名前のカスタムアナライザを使用して、コレクション内のtext.en_USをインデックス化します。 カスタムアナライザは、以下を指定します。

  • htmlStop文字フィルターを適用して、 aタグを除くすべての HTML タグをテキストから削除します。

  • キーワード トークナイザを適用して、string 全体に対する単一のトークンを作成します。

  • trimトークンフィルターを適用して、トークンの先頭と末尾の空白を削除します。

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

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

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

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

  5. ドロップダウンから [ htmlStripを選択し、 ignoredTagsフィールドにaと入力します。

  6. Add character filterをクリックして、文字フィルターをカスタムアナライザに追加します。

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

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

  9. Token Filtersを展開し、 をクリックしますAdd token filter

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

  11. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

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

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

  14. text.en_US を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。

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

  16. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"en_US": {
"type": "string",
"analyzer": "tokenTrimmer"
}
}
}
}
},
"analyzers": [
{
"name": "tokenTrimmer",
"charFilters": [{
"type": "htmlStrip",
"ignoredTags": ["a"]
}],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "trim"
}
]
}
]
}

次のクエリは、のコレクションのtext.en_USフィールドで、 *department meetings*の前に付き、その後に任意の数の他の文字が続くフレーズを検索します。

1db.minutes.aggregate([
2 {
3 "$search": {
4 "wildcard": {
5 "query": "*department meetings*",
6 "path": "text.en_US",
7 "allowAnalyzedField": true
8 }
9 }
10 },
11 {
12 "$project": {
13 "_id": 1,
14 "text.en_US": 1
15 }
16 }
17])
1[
2 {
3 _id: 1,
4 text: { en_US: '<head> This page deals with department meetings. </head>' }
5 }
6]

Atlas Search では、 en_USフィールドにクエリ用語department meetingsが含まれているため、 _id: 1を含むドキュメントが返されます。 Atlas Search は、結果のドキュメントに対して次のトークンを作成します。これは、Atlas Search が HTML タグを削除し、string 全体に対して単一のトークンを作成し、トークン内の先頭と末尾の空白を削除したことを示しています。

ドキュメント ID
出力トークン

_id: 1

This page deals with department meetings.

wordDelimiterGraphトークン フィルターは、構成されたルールに基づいてトークンをサブトークンに分割します。 このトークン フィルターは、このトークン フィルターが境界を決定するために使用する単語内区切り文字の多くを削除するため、標準のトークナイザではこのトークン フィルターを使用しないことをお勧めします。

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

名前
タイプ
必須
説明

type

string

はい

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

delimiterOptions

オブジェクト

no

単語をサブ単語に分割する方法を決定するルールを含むオブジェクト。

デフォルト: {}

delimiterOptions
.generateWordParts

ブール値

no

サブワードに基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションはPowerShotPowerShotに分割します。

デフォルト: true

delimiterOptions
.generateNumberParts

ブール値

no

サブ番号に基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションは100-21002に分割します。

デフォルト: true

delimiterOptions
.concatenateWords

ブール値

no

サブワードの実行を連結するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションはwi-fiwifiに連結します。

デフォルト: false

delimiterOptions
.concatenateNumbers

ブール値

no

サブ番号の実行を連結するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションは100-21002に連結します。

デフォルト: false

delimiterOptions
.concatenateAll

ブール値

no

すべての実行を連結するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションはwi-fi-100-2wifi1002に連結します。

デフォルト: false

delimiterOptions
.preserveOriginal

ブール値

no

元の単語のトークンを生成するかどうかを示すフラグ。

デフォルト: true

delimiterOptions
.splitOnCaseChange

ブール値

no

大文字と小文字の移行に基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションはcamelCasecamelCaseに分割します。

デフォルト: true

delimiterOptions
.splitOnNumerics

ブール値

no

文字数トランザクションに基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションはg2gg2gに分割します。

デフォルト: true

delimiterOptions
.stemEnglishPossessive

ブール値

no

各サブワードから後続の所有者を削除するかどうかを示すフラグ。 たとえば、 trueの場合、このオプションはwho'swhoに変更します。

デフォルト: true

delimiterOptions
.ignoreKeywords

ブール値

no

keyword属性がtrueに設定されているトークンをスキップするかどうかを示すフラグ。

デフォルト: false

protectedWords

オブジェクト

no

保護された単語のオプションを含むオブジェクト。

デフォルト: {}

protectedWords
.words

配列

条件付き

区切りから保護するトークンを格納したリスト。 protectedWordsを指定する場合は、このオプションを指定する必要があります。

protectedWords
.ignoreCase

ブール値

no

保護された単語の大文字と小文字の区別を無視するかどうかを示すフラグ。

デフォルト: true

trueの場合は、このオプションの後にflattenGraphトークン フィルターを適用して、トークンストリームをインデックス作成に適したものにします。

次のインデックス定義は、 wordDelimiterGraphAnalyzerという名前のカスタムアナライザを使用して、コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。

  1. ホワイトスペーストークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。

  2. 次のものにwordDelimiterGraphトークン フィルターを適用します。

    • istheatの分割は試行しないでください。 除外では、大文字と小文字が区別されます。 たとえば、 IstHeは除外されません。

    • 大文字と小文字の変更でトークンを分割し、英数字からアルファベットのみを含むトークンを削除します。

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

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

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

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

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

  6. Token Filtersを展開し、 をクリックしますAdd token filter

  7. ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。

  8. をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。

  9. ドロップダウンからwordDelimiterGraphを選択し、次のフィールドを構成します。

    1. の選択を解除し、delimiterOptions.generateWordParts delimiterOptions.splitOnCaseChangeを選択します。

    2. protectedWords.wordsフィールドに、 istheatという単語を一度に 1 つずつ入力し、ドロップダウンから選択します。

    3. protectedWords.ignoreCaseの選択を解除します。

  10. Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。

  11. カスタムアナライザを作成するには、 Addをクリックします。

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

  13. Field Nameドロップダウンからネストされたタイトルを選択し、 Data Typeドロップダウンからstringを選択します。

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

  15. [ Addをクリックし、 Save Changesをクリックします。

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "wordDelimiterGraphAnalyzer"
}
}
},
"analyzers": [
{
"name": "wordDelimiterGraphAnalyzer",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "wordDelimiterGraph",
"protectedWords": {
"words": ["is", "the", "at"],
"ignoreCase": false
},
"delimiterOptions" : {
"generateWordParts" : false,
"splitOnCaseChange" : true
}
}
]
}
]
}

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

db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "App2",
"path": "title"
}
}
},
{
"$project": {
"_id": 1,
"title": 1
}
}
])
[
{
_id: 4,
title: 'The daily huddle on tHe StandUpApp2'
}
]

Atlas Search では、ドキュメントのtitleフィールドにApp2が含まれているため、 _id: 4を含むドキュメントが返されます。 Atlas Search は、大文字と小文字の変更でトークンを分割し、分割によって作成されたアルファベットのみを含むトークンを削除します。 また、インデックス アナライザ(または指定されている場合はsearchAnalyzerを使用)を使用してクエリ用語を分析し、大文字と小文字の変更時に単語を分割し、 2の前にある文字を削除します。 具体的には、Atlas Search は、 オプションと_id : 4 protectedWordsオプションに対してdelimiterOptions を使用してドキュメントに対して次のトークンを作成します。

wordDelimiterGraph オプション
出力トークン

protectedWords

The, daily, huddle, on, t, He, Stand, Up, App, 2

delimiterOptions

The, daily, huddle, on, 2

戻る

トークナイザ