トークン フィルター
項目一覧
トークン フィルターは、次のような操作を実行します。
ステミング 。これにより、「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トークン フィルター。 |
アクション | カスタム アナライザで実行できるアクションを示すクリック可能なアイコン。
|
as読み取り
asciiFolding
トークン フィルターは、 基本ラテン Unicode ブロック に含まれていないアルファベット、数字、記号 Unicode 文字を ASCII に変換します(使用可能な場合)。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| string | no | トークン フィルターの出力に元のトークンを含めるか省略するかを指定する string。 値は次のいずれかになります。
デフォルト: |
例
次のインデックス定義は、 asciiConverter
という名前のカスタムアナライザを使用して、分コレクションのpage_updated_by.first_name
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
asciiFolding
トークン フィルターを適用して、フィールド値をASCIIと同等に変換します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
asciiConverter
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [asciiFolding] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.first_nameにカスタムアナライザを適用します フィールドのマルチキー インデックスの図。
[ page_update_by.first_name] を選択します Field Name ドロップダウンからのstringと、Data Type ドロップダウンの string 。
データタイプのプロパティ
asciiConverter
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
と一致するために使用されたためです。
フィールド名 | 出力トークン |
---|---|
|
|
dwitchMoあります
daitchMokotoffSoundex
トークン フィルターは、 デーモン:Moのみに 基づいて同じように発音する単語のトークンを作成します 発音アルゴリズム。このフィルターは、入力ごとに複数のエンコーディングを生成できます。各エンコードされたトークンは6桁の数字です。
注意
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| string | no | トークン フィルターの出力に元のトークンを含めるか省略するかを指定する string。 値は次のいずれかになります。
デフォルト: |
例
次のインデックス定義は、 dmsAnalyzer
という名前のカスタムアナライザを使用して、分コレクションのpage_updated_by.last_name
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
daitchMokotoffSoundex
トークン フィルターを適用して、同じように発音する単語のトークンをエンコードします。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
dmsAnalyzer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [ daitchMokotoffSoundexを選択し、 originalTokensフィールドに次の表に示す値を選択します。
フィールド値originalTokens
include
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.last_nameにカスタムアナライザを適用します フィールドのマルチキー インデックスの図。
[ last_name] ページ_アップデート_バイ.を選択 Field Name ドロップダウンからのstringと、Data Type ドロップダウンの string 。
データタイプのプロパティ
dmsAnalyzer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 桁の数字( 097400
と097500
)を使用してコード化されているためです。 次の表は、結果内のドキュメントに対して Atlas Search が作成するトークン(検索可能なタームと 6 桁のエンコーディング)を示しています。
ドキュメント ID | 出力トークン |
---|---|
|
|
|
|
edgeGram
edgeGram
トークン フィルターは、テキスト入力の左側、つまり「エッジ」からの入力を、構成されたサイズの n グラムにトークン化します。
注意
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | 生成された n グラムの最小長を指定する数値。 値は |
| integer | はい | 生成された n グラムの最大長を指定する数値。 値は |
| string | no |
デフォルト: |
例
次のインデックス定義は、 titleAutocomplete
という名前のカスタムアナライザを使用して、分コレクションのtitle
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
トークンに次のフィルターを適用します。
icuFolding
トークンに文字のたたみを適用する トークン フィルター 。edgeGram
トークン フィルターを使用して、左側から 4 ~ 7 文字の長さのトークンを作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
titleAutocomplete
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからicuFoldingを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからedgeGramを選択し、 フィールドに次の表に示す値を入力します。
フィールド値minGram
4
maxGram
7
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
titleAutocomplete
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 | 出力トークン |
---|---|
|
|
|
|
englishPassive
englishPossessive
トークン フィルターは、単語から所有語( 's
の末尾)を削除します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 englishPossessiveStemmer
という名前のカスタムアナライザを使用して、分コレクションのtitle
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、単語割りルールに基づいてトークン(検索ターム)を作成します。
englishPassiveトークン フィルターを適用して、トークンから所有者(
's
の末尾)を削除します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
englishPossessiveStemmer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [englishPossessive] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
englishPossessiveStemmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 | 出力トークン |
---|---|
|
|
|
|
flattenGraph
flattenGraph
トークンフィルターは、トークンフィルターグラフをインデックス作成に適した平面形式に変換します。 queryGraphトークン フィルターを使用する場合は、 wordDelimiterGraphトークン フィルターの後にこのフィルターを使用します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 wordDelimiterGraphFlatten
というカスタムアナライザを使用して、分コレクションのmessage
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
ホワイトスペーストークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。
トークンに次のフィルターを適用します。
サブ単語に基づいてトークンを分割し、元の単語のトークンを生成し、単語
SIGN_IN
を区切り文字から保護するstringフィルターです。トークンを平面形式にフラット化するためのflattenGraphトークン フィルター。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
wordDelimiterGraphFlatten
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからwordDelimiterGraphを選択し、トークン フィルターに次のフィールドを構成します。
次のフィールドを選択します。
フィールド値delimiterOptions.generateWordParts
true
delimiterOptions.preserveOriginal
true
protectedWords.words
フィールドにSIGN_IN
と入力します。protectedWords.ignoreCase
を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [flattenGraph] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
wordDelimiterGraphFlatten
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 | 出力トークン |
|
|
ic ページ フォールディング
トークン フィルターはicuFolding
Unicode テクニカル レポート #30 の文字フォールディングを適用します 、アクセントの削除、大文字と小文字のフォールディング、標準の重複のフォールディングなど、レポートで詳細に説明されている多くの
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 diacriticFolder
という名前のカスタムアナライザを使用して、分コレクションのtext.sv_FI
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
キーワード トークナイザを適用して、string フィールド内のすべてのタームを 1 つのタームとしてトークン化します。
icuFolding
トークン フィルターを使用して、アクセント削除、大文字と小文字のフォールディング、標準重複のフォールディングなどのフォールディングを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
diacriticFolder
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [keyword] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [icuFolding] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックしてtext.sv_FIにカスタムアナライザを適用します ネストされたフィールド。
text.sv_FI を選択します Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
diacriticFolder
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 | 出力トークン |
---|---|
|
|
|
|
icuNormalizer
トークン フィルターは、標準のicuNormalizer
Unicode 正規化モードを使用してトークンを正規化します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| string | no | 適用される正規化形式。 指定できる値は以下のとおりです。
サポートされている正規化形式の詳細については、 セクション 1.2: 正規化形式、UTR#15 を参照してください。 デフォルト: |
例
次のインデックス定義は、 textNormalizer
という名前のカスタムアナライザを使用して、分コレクションのmessage
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
ホワイトスペース トークナイザ を使用して、単語間の空白の発生に基づいてトークンを作成します。
icuNormalizer
トークンフィルターを使用して、互換性分割、その後に標準構成によってトークンを正規化します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
textNormalizer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [ icuNormalizerを選択し、 normalizationFormドロップダウンから [
nfkc
] を選択します。Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
textNormalizer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 が作成するトークン(検索可能なターム)と、他の正規化形式用に作成されるトークンを示しています。
正規化形式 | 出力トークン | マッチ |
|
| X |
|
| X |
|
| ✓ |
|
| ✓ |
kStemming
kStemming
トークン フィルターは、アルゴリズム ステミングと英語の組み込み辞書を組み合わせて、単語のステミングを行います。 小文字のテキストを要求し、大文字のテキストは変更されません。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 kStemmer
という名前のカスタムアナライザを使用して、分コレクションのtext.en_US
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のフィルターを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
kStemmer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [kStemming] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックしてtext.en_USにカスタムアナライザを適用します ネストされたフィールド。
text.en_US を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
kStemmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
length
トークン フィルターは、長すぎる または 短いトークンを排除します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| integer | no | トークンの最小長を指定する数値。 値は デフォルト: |
| integer | no | トークンの最大長を指定する数値。 値は デフォルト: |
例
次のインデックス定義は、 longOnly
という名前のカスタムアナライザを使用して、分コレクションのtext.sv_FI
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
トークンに次のフィルターを適用します。
文字のフォールディングを適用するための ic間にフォールディングトークン フィルターを使用します。
length
トークンフィルターを使用して、トークン化後の長さが少なくとも 20 UTF-16 コード ユニットであるトークンのみをインデックスします。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
longOnly
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからicuFoldingを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからlengthを選択し、トークン フィルターに次のフィールドを構成します。
フィールド値min
20
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field MappingsセクションでAdd Field Mappingをクリックして、 text.sv.FIネストされたフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからネストされたtext.sv.FIedを選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
longOnly
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
トークンフィルターは、トークンテキストを小文字に正規化します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義の例では、 nGram
トークン化戦略を使用して、分コレクションのtitle
フィールドをタイプオートコンプリートとしてインデックス化します。 title
フィールドにkeywordLowerer
という名前のカスタムアナライザが適用されます。 カスタムアナライザは、以下を指定します。
キーワードトークナイザ を適用して、string または string の配列用の単一のトークンを作成します。
lowercase
トークンフィルターを適用して、トークンテキストを小文字に変換します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、 Nextをクリックします。
Analyzer Nameフィールドに
keywordLowerer
と入力します。Tokenizerが折りたたまれている場合は展開し、ドロップダウンからkeywordを選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからタイトルを選択し、 Data Typeドロップダウンからオートコンプリートを選択します。
データタイプのプロパティ セクションで、プロパティのドロップダウンから次の値を選択します。
プロパティ名値Analyzer
keywordLowerer
Tokenization
nGram
[ 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 | 出力トークン |
|
|
カスタム アナライザを適用すると、Atlas Search は n グラムのさらにトークンを作成します。Atlas Search はインデックス定義で指定されたオートコンプリートタイプとしてtitle
フィールドをインデックス化するためです。 Atlas Search は、ドキュメントをクエリ用語standup
に照合するために、 standup
のトークンを含む n グラムのトークンを使用します。
次のインデックス定義は、 lowerCaser
という名前のカスタムアナライザを使用して、分コレクションのmessage
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザを適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のフィルターを適用します。
標準の Unicode 正規化モードを使用してトークンを正規化するためのicuNormalizer
lowercase
トークン テキストを小文字に変換する トークン フィルター 。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
lowerCaser
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [ icuNormalizerを選択し、 normalizationFormドロップダウンから [
nfkd
] を選択します。Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [lowercase] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、メッセージフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからメッセージを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
lowerCaser
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
を使用)を使用してクエリ用語を分析し、クエリ用語を分割し、それをドキュメントと照合します。
正規化形式 | 出力トークン |
|
|
|
|
|
|
nGram
nGram
トークン フィルターは、入力を設定されたサイズの n グラムにトークン化します。 シノニム (同意語) または オートコンプリート マッピング定義では nGram トークン フィルターは使用できません。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | 生成された n グラムの最小長を指定する数値。 値は |
| integer | はい | 生成された n グラムの最大長を指定する数値。 値は |
| string | no |
デフォルト: |
例
次のインデックス定義は、 titleAutocomplete
という名前のカスタムアナライザを使用して、分コレクションのtitle
フィールドをインデックス化します。 カスタムアナライザ関数は、以下を指定します。
標準のトークナイザを適用して、単語の指定ルールに基づいてトークンを作成する。
トークンに一連のトークンフィルターを適用します。
englishPossessive
単語から所有語('s
の末尾)を削除します。nGram
単語を長さが 4 ~ 7 文字にトークン化します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
titleAutocomplete
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからenglishPossessiveを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからnGramを選択し、トークン フィルターに次のフィールドを構成します。
フィールド値minGram
4
maxGram
7
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
titleAutocomplete
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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*
に一致します。
正規化形式 | 出力トークン |
---|---|
|
|
|
|
注意
Atlas Search では、 termNotInBounds
パラメータがデフォルトでomit
に設定されているため、4 文字未満( the
など)および 7 文字を超えるタームのトークンは作成されません。 termNotInBounds
パラメータの値をinclude
に設定すると、Atlas Search はthe
というタームのトークンも作成します。
porterStemming
porterStemming
これは小文字のテキストを要求し、大文字のテキストの場合は期待どおりに動作しません。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 porterStemmer
という名前のカスタムアナライザを使用して、分コレクションのtitle
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のトークン フィルターを適用します。
小文字のトークン フィルター を使用して、単語を小文字に変換します。
単語から一般的な語形接尾辞、または語形接尾辞を削除するためのporterStemingトークン フィルター。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
porterStemmer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [porterStemming] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
porterStemmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
と照合します。
正規化形式 | 出力トークン |
---|---|
|
|
|
|
regex
regex
トークン フィルターは、各トークンに正規表現を適用し、指定されたstringと一致させます。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | はい | このトークン フィルターを識別する、人間が判読できるラベル。 値は | |||||||||||||||||||||
| string | はい | 各トークンに適用する正規表現パターン。 | |||||||||||||||||||||
| string | はい | 一致するパターンが発生するたびに置き換える置換string 。 トークンを無視または削除するには、空の文字列(
| |||||||||||||||||||||
| string | はい | 指定できる値は以下のとおりです。
|
例
次のインデックス定義は、 emailRedact
という名前のカスタムアナライザを使用して、分コレクションのpage_updated_by.email
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
キーワード トークナイザを適用して、フィールド値内のすべての単語を 1 つのタームとしてインデックスします。
トークンに次のトークン フィルターを適用します。
小文字のトークン フィルター を使用して、トークン内の大文字を小文字に変換します。
regex
トークン フィルターを使用して、トークン内のメールアドレスに似た文字列を検索し、redacted
という単語に置き換えます。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
emailRedact
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [keyword] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからregexを選択し、トークン フィルターに以下を構成します。
patternフィールドに
^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$
と入力します。replacementフィールドに
redacted
と入力します。matchesドロップダウンから
all
を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailネストされたフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからネストされたpage_update_by.emailとData Typeドロップダウンからのstringを選択します。
データタイプのプロパティ
emailRedact
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
の前に任意の数の他の文字が続くタームを検索します。
1 db.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 トークンを逆にします。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルターを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 keywordReverse
という名前のカスタムアナライザを使用して、分コレクション内のpage_updated_by.email
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
キーワード トークナイザを適用して、文字列全体を単一のタームとしてトークン化します。
string トークンを逆にするには、
reverse
トークンフィルターを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
keywordReverse
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [keyword] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [reverse] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailネストされたフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからネストされたpage_update_by.emailとData Typeドロップダウンからのstringを選択します。
データタイプのプロパティ
keywordReverse
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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@*
に照合します。
正規化形式 | 出力トークン |
---|---|
|
|
|
|
|
|
|
|
単一選択
shingle
トークン フィルターは、一連のトークンからシングルスディング(トークン n グラム)を構築します。 シノニムまたはオートコンプリートマッピング定義ではshingle
トークン フィルターは使用できません。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | シングルあたりのトークンの最小数。 |
| integer | はい | 1 秒あたりのトークンの最大数。 |
例
分コレクションのpage_updated_by.email
フィールドの次のインデックス定義例では、2 つのカスタムアナライザであるemailAutocompleteIndex
とemailAutocompleteSearch
を使用して、オートコンプリートのような機能を実装しています。 Atlas Search は、インデックス作成中にemailAutocompleteIndex
アナライザを使用して次のようにします。
Atlas Search は、検索中にemailAutocompleteSearch
アナライザを使用して次のことを行います。
フィールド内の
@
文字をAT
に置き換えホワイトスペース トークナイザトークナイザを使用したトークンの作成
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
emailAutocompleteIndex
と入力します。Character Filtersを展開し、 をクリックしますAdd character filter 。
ドロップダウンからmappingを選択し、 をクリックします。 Add mapping 。
次のキーと値を入力します。
キー値@
AT
Add character filterをクリックして、文字フィルターをカスタムアナライザに追加します。
Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [ whitespaceを選択し、 maxTokenLengthフィールドに
15
を入力します。Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからshingleを選択し、次のフィールドを設定します。
フィールドフィールド値minShingleSize
2
minShingleSize
3
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからedgeGramを選択し、トークン フィルターに次のフィールドを構成します。
フィールドフィールド値minGram
2
maxGram
15
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
emailAutocompleteSearch
と入力します。Character Filtersを展開し、 をクリックしますAdd character filter 。
ドロップダウンからmappingを選択し、 をクリックします。 Add mapping 。
次のキーと値を入力します。
キー値@
AT
Add character filterをクリックして、文字フィルターをカスタムアナライザに追加します。
Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [ whitespaceを選択し、 maxTokenLengthフィールドに
15
を入力します。Addをクリックして、カスタムアナライザをインデックスに追加します。
Field MappingsセクションでAdd Field Mappingをクリックして、 page_update_by.emailネストされたフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからネストされたpage_update_by.emailとData Typeドロップダウンからのstringを選択します。
データ型のプロパティ セクションで、 Index Analyzerドロップダウンから [
emailAutocompleteIndex
を選択し、 Search Analyzerドロップダウンから [emailAutocompleteSearch
] を選択します。[ 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 |
---|---|
|
|
refresh
snowballStemming
トークンは、 Snowball で生成されたステマーを使用してステミング トークンをフィルタリングします。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| string | はい | 次の値が有効です。
|
例
次のインデックス定義は、 frenchStemmer
という名前のカスタムアナライザを使用して、分コレクションのtext.fr_CA
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のトークン フィルターを適用します。
トークンを小文字に変換する小文字トークン フィルター 。
french
snowballStemming
の バリアント トークン フィルター を使用して、単語のステミングを行います。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
frenchStemmer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [ snowballStemmingを選択し、 stemmerNameドロップダウンから [
french
] を選択します。Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックしてtext.fr_CAにカスタムアナライザを適用します ネストされたフィールド。
text.fr_CA を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
frenchStemmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 | 出力トークン |
---|---|
|
|
spanishPluralSteming
spanishPluralStemming
トークンフィルターは、スペイン語の複数形の単語を語幹にしています。 小文字のテキストが必要です。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 spanishPluralStemmer
という名前のカスタムアナライザを使用して、分コレクションのtext.es_MX
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のトークン フィルターを適用します。
スペイン語のタームを小文字に変換する小文字のトークン フィルター。
spanishPluralStemming
トークン フィルターを使用して、トークン内の複数のスペイン語の単語を単数形の形式にステミングします。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
spanishPluralStemmer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [spanishPluralStemming] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックしてテキストにカスタムアナライザを適用します。 ネストされたフィールド。
text.es_TX を選択します Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
spanishPluralStemmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
)を語幹によりpuntos
をpunto
として分析するため、Atlas Search はクエリ用語punto
にこのドキュメントを照合します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語に一致させるために使用します。
ドキュメント ID | 出力トークン |
|
|
stempel
トークン フィルターは Lucene の デフォルトのポリゴンstempel
ステマー テーブル を使用します ポーランド語の単語の語幹を操作します。小文字のテキストが必要です。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 stempelStemmer
という名前のカスタムアナライザを使用して、分コレクションのtext.pl_PL
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のフィルターを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
stempelStemmer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [stempel] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックしてtext.pl_PLにカスタムアナライザを適用します ネストされたフィールド。
text.pl_PL を選択します Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
stempelStemmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
)を語幹によりpunkty
をpunkt
として分析するため、Atlas Search はクエリ用語punkt
にこのドキュメントを照合します。 具体的には、Atlas Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリ用語に照合します。
ドキュメント ID | 出力トークン |
---|---|
|
|
ストップワード
stopword
トークンフィルターは、指定されたストップワードに対応するトークンを削除します。 このトークン フィルターは、指定されたストップワードは分析しません。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| 文字列の配列 | はい | 削除するトークンに対応するストップワードを含むリスト。 値は 1 つ以上のストップワードである必要があります。 |
| ブール値 | no | 削除するトークンをフィルタリングするときに、ストップワードの大文字と小文字を無視するかどうかを示すフラグ。 値は次のいずれかになります。
デフォルト: |
例
次のインデックス定義は、 stopwordRemover
という名前のカスタムアナライザを使用して、分コレクションのtitle
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
ホワイトスペース トークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。
stopword
トークン フィルターを適用して、定義されたストップワードis
、the
、at
に一致するトークンを削除します。 トークン フィルターは大文字と小文字を区別せず、指定されたストップワードに一致するすべてのトークンを削除します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
stopwordRemover
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [ stopwordを選択し、 tokensフィールドに以下を入力します。
is
,the
,at
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックしてtext.en_USにカスタムアナライザを適用します ネストされたフィールド。
text.en_US を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
stopwordRemover
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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
を検索します。
1 db.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 | 出力トークン |
---|---|
|
|
trigger
trim
トークン フィルターは、トークンから先頭と末尾の空白を削除します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 tokenTrimmer
という名前のカスタムアナライザを使用して、分コレクション内のtext.en_US
をインデックス化します。 カスタムアナライザは、以下を指定します。
htmlStop文字フィルターを適用して、
a
タグを除くすべての HTML タグをテキストから削除します。キーワード トークナイザを適用して、string 全体に対する単一のトークンを作成します。
trim
トークンフィルターを適用して、トークンの先頭と末尾の空白を削除します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
tokenTrimmer
と入力します。Character Filtersを展開し、 をクリックしますAdd character filter 。
ドロップダウンから [ htmlStripを選択し、 ignoredTagsフィールドに
a
と入力します。Add character filterをクリックして、文字フィルターをカスタムアナライザに追加します。
Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [keyword] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [trim] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Field Mappingsセクションで、 Add Field Mappingをクリックしてtext.en_USにカスタムアナライザを適用します ネストされたフィールド。
text.en_US を選択 Field Nameドロップダウンからネストされたstringと、 Data Typeドロップダウンからネストされた string 。
データタイプのプロパティ
tokenTrimmer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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*
の前に付き、その後に任意の数の他の文字が続くフレーズを検索します。
1 db.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 | 出力トークン |
---|---|
|
|
[wordDelimiterGraph]
wordDelimiterGraph
トークン フィルターは、構成されたルールに基づいてトークンをサブトークンに分割します。 このトークン フィルターは、このトークン フィルターが境界を決定するために使用する単語内区切り文字の多くを削除するため、標準のトークナイザではこのトークン フィルターを使用しないことをお勧めします。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| オブジェクト | no | 単語をサブ単語に分割する方法を決定するルールを含むオブジェクト。 デフォルト: |
delimiterOptions .generateWordParts | ブール値 | no | サブワードに基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .generateNumberParts | ブール値 | no | サブ番号に基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .concatenateWords | ブール値 | no | サブワードの実行を連結するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .concatenateNumbers | ブール値 | no | サブ番号の実行を連結するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .concatenateAll | ブール値 | no | すべての実行を連結するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .preserveOriginal | ブール値 | no | 元の単語のトークンを生成するかどうかを示すフラグ。 デフォルト: |
delimiterOptions .splitOnCaseChange | ブール値 | no | 大文字と小文字の移行に基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .splitOnNumerics | ブール値 | no | 文字数トランザクションに基づいてトークンを分割するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .stemEnglishPossessive | ブール値 | no | 各サブワードから後続の所有者を削除するかどうかを示すフラグ。 たとえば、 デフォルト: |
delimiterOptions .ignoreKeywords | ブール値 | no |
デフォルト: |
| オブジェクト | no | 保護された単語のオプションを含むオブジェクト。 デフォルト: |
protectedWords .words | 配列 | 条件付き | 区切りから保護するトークンを格納したリスト。 |
protectedWords .ignoreCase | ブール値 | no | 保護された単語の大文字と小文字の区別を無視するかどうかを示すフラグ。 デフォルト: |
true
の場合は、このオプションの後にflattenGraphトークン フィルターを適用して、トークンストリームをインデックス作成に適したものにします。
例
次のインデックス定義は、 wordDelimiterGraphAnalyzer
という名前のカスタムアナライザを使用して、分コレクションのtitle
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
ホワイトスペーストークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。
次のものにwordDelimiterGraphトークン フィルターを適用します。
is
、the
、at
の分割は試行しないでください。 除外では、大文字と小文字が区別されます。 たとえば、Is
とtHe
は除外されません。大文字と小文字の変更でトークンを分割し、英数字からアルファベットのみを含むトークンを削除します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
wordDelimiterGraphAnalyzer
と入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからwordDelimiterGraphを選択し、次のフィールドを構成します。
の選択を解除し、delimiterOptions.generateWordParts delimiterOptions.splitOnCaseChangeを選択します。
「
protectedWords.words
フィールドに、is
、the
、at
という単語を一度に 1 つずつ入力し、ドロップダウンから選択します。protectedWords.ignoreCase
の選択を解除します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルのネストされたフィールドにカスタムアナライザを適用します。
Field Nameドロップダウンからネストされたタイトルを選択し、 Data Typeドロップダウンからstringを選択します。
データタイプのプロパティ
wordDelimiterGraphAnalyzer
セクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ 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 オプション | 出力トークン |
---|---|
|
|
|
|