トークン フィルターは、次のような操作を実行します。
ステミング 。これにより、「toring」、「thaled」、「torages」などの関連単語を語幹単語の「torage」に減らします。
編集 : 公開ドキュメントから機密情報を排除します。
トークンフィルターにはタイプフィールドが必要であり、一部には追加のオプションも必要です。
"tokenFilters": [ { "type": "<token-filter-type>", "<additional-option>": <value> } ]
トークン フィルターのタイプ
MongoDB Search は、次のタイプのトークン フィルターをサポートしています。
次のサンプルインデックス定義とクエリでは、 という名前の minutesサンプルコレクションを使用します。これらの例に従うには、クラスターにminutes コレクションをロードし、 「Create a Search Index MongoDB Search インデックスの作成 」チュートリアルの手順に従って、Atlas UIの ページに移動します。次に、データソースとしてminutes コレクションを選択し、例手順に従って、Atlas UIまたはmongosh を使用してインデックスを作成します。
➤ [言語の選択] ドロップダウン メニューを使用して、このページの例の言語を設定します。
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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "page_updated_by": { 8 "type": "document", 9 "dynamic": false, 10 "fields": { 11 "first_name": { 12 "type": "string", 13 "analyzer": "asciiConverter" 14 } 15 } 16 } 17 } 18 }, 19 "analyzers": [ 20 { 21 "name": "asciiConverter", 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "asciiFolding" 28 } 29 ] 30 } 31 ] 32 } 33 )
次のクエリは、分のコレクションのfirst_nameフィールドで、ASCII に相当する名前を使用して名前を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "Sian", "path": "page_updated_by.first_name" } } }
SCORE: 0.5472603440284729 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Cette page traite des réunions de département"
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'} } ]
MongoDB Search は結果に _id: 1 を含むドキュメントを返します。これは、 MongoDB Search がドキュメントの page_updated_by.first_nameフィールド用に次のトークン(検索可能なターム)を作成し、それがクエリタームの Sian と一致するために使用したためです。
フィールド名 | 出力トークン |
|---|---|
|
|
dwitchMoあります
daitchMokotoffSoundexトークン フィルターは、アルゴリズム:このフィルターは、入力ごとに複数のエンコーディングを生成できます。各エンコードされたトークンは 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フィールドに次の表に示す値を選択します。
フィールド値originalTokensincludeAdd 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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "page_updated_by": { 8 "type": "document", 9 "dynamic": false, 10 "fields": { 11 "last_name": { 12 "type": "string", 13 "analyzer": "dmsAnalyzer" 14 } 15 } 16 } 17 } 18 }, 19 "analyzers": [ 20 { 21 "name": "dmsAnalyzer", 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "daitchMokotoffSoundex", 28 "originalTokens": "include" 29 } 30 ] 31 } 32 ] 33 } 34 )
次のクエリは、分コレクションのpage_updated_by.last_nameフィールドでAUERBACHに似たタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "AUERBACH", "path": "page_updated_by.last_name" } } }
SCORE: 0.568153440952301 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département" SCORE: 0.521163284778595 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object last_name: "OHRBACH" first_name: "Noël" email: "ohrbach@example.com" phone: "(123) 456 0987" text: Object en_US: "The head of the sales department spoke first." fa_IR: "ابتدا رئیس بخش فروش صحبت کرد" sv_FI: "Först talade chefen för försäljningsavdelningen"
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" } } ]
MongoDB Search では、_id: 1 と _id: 2 を含むドキュメントが返されます。これは、両方のドキュメントのタームが発音区別符号的に類似しており、同じ 6 桁の数字(097400 と 097500)を使用してコード化されているためです。次の表は、結果内のドキュメントに対してMongoDB Search が作成するトークン(検索可能なタームと 6 桁のエンコーディング)を示しています。
ドキュメント ID | 出力トークン |
|---|---|
|
|
|
|
edgeGram
edgeGramトークン フィルターは、テキスト入力の左側、つまり「エッジ」からの入力を、構成されたサイズの n グラムにトークン化します。
注意
通常、トークン フィルターはパイプラインと同様に動作し、各入力トークンが生成する出力トークンは 1 つだけで、その後は後続のトークンに入力されます。対照的に、edgeGram トークン フィルターは、単一の入力トークンから複数の出力トークンを生成するグラフを生成するフィルターです。
シノニム と オートコンプリート のフィールド型マッピング定義は、グラフを生成しないトークン フィルターとともに使用された場合にのみ機能するため、 シノニム または オートコンプリート のフィールド型マッピング定義では EdgeGram トークン フィルターを使用することはできません。
regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、edgeGram トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| 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を選択し、 フィールドに次の表に示す値を入力します。
フィールド値minGram4
maxGram7
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 } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "titleAutocomplete", 5 "mappings": { 6 "dynamic": false, 7 "fields": { 8 "title": { 9 "type": "string", 10 "analyzer": "titleAutocomplete" 11 } 12 } 13 }, 14 "analyzers": [ 15 { 16 "name": "titleAutocomplete", 17 "charFilters": [], 18 "tokenizer": { 19 "type": "standard" 20 }, 21 "tokenFilters": [ 22 { 23 "type": "icuFolding" 24 }, 25 { 26 "type": "edgeGram", 27 "minGram": 4, 28 "maxGram": 7 29 } 30 ] 31 } 32 ] 33 } 34 )
次のクエリは、分コレクションのtitleフィールドで、 meeで始まり、その後に任意の数の他の文字が続くタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }
SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
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' } ]
MongoDB Search では、クエリ条件に一致するタームmeeting が含まれているため、_id: 1 と _id: 3 を含むドキュメントが返されます。具体的には、 MongoDB 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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "type": "string", 8 "analyzer": "englishPossessiveStemmer" 9 } 10 } 11 }, 12 "analyzers": [ 13 { 14 "name": "englishPossessiveStemmer", 15 "charFilters": [], 16 "tokenizer": { 17 "type": "standard" 18 }, 19 "tokenFilters": [ 20 { 21 "type": "englishPossessive" 22 } 23 ] 24 } 25 ] 26 } 27 )
次のクエリは、分コレクションのtitleフィールドでteamというタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "team", "path": "title" } } }
SCORE: 0.34314215183258057 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object SCORE: 0.29123833775520325 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
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' } ]
MongoDB Search では、titleフィールドに team というタームが含まれる結果が返されます。MongoDB Search は、分析中に titleフィールドの team's をトークン team に変換するため、 _id: 1 を含むドキュメントを返します。 具体的には、 MongoDB 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.generateWordPartstrue
delimiterOptions.preserveOriginaltrue
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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "message": { 7 "type": "string", 8 "analyzer": "wordDelimiterGraphFlatten" 9 } 10 } 11 }, 12 "analyzers": [ 13 { 14 "name": "wordDelimiterGraphFlatten", 15 "charFilters": [], 16 "tokenizer": { 17 "type": "whitespace" 18 }, 19 "tokenFilters": [ 20 { 21 "type": "wordDelimiterGraph", 22 "delimiterOptions": { 23 "generateWordParts": true, 24 "preserveOriginal": true 25 }, 26 "protectedWords": { 27 "words": [ 28 "SIGN_IN" 29 ], 30 "ignoreCase": false 31 } 32 }, 33 { 34 "type": "flattenGraph" 35 } 36 ] 37 } 38 ] 39 } 40 )
次のクエリは、分コレクションのmessageフィールドでsignというタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "sign", "path": "message" } } }
SCORE: 0.6763891577720642 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 3, message: 'try to sign-in' } ]
MongoDB Search では、ドキュメントの titleフィールドにハイフン付きのタームsign-in が含まれている場合でも、クエリタームsign の結果に _id: 3 が含まれるドキュメントが返されます。wordDelimiterGraph トークン フィルターはトークン フィルターグラフを作成し、flattenGraph トークン フィルターはトークン フィルターグラフをインデックスに適した平面形式に変換します。具体的には、 MongoDB Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリタームの sign に照合します。
ドキュメント ID | 出力トークン |
|
|
ic ページ フォールディング
icuFoldingトークン フィルターは、アクセントの削除、大文字と小文字のフォールディング、標準重複のフォールディングなど、Unicode30 テクニカル レポート の文字フォールディングを適用します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| 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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "diacriticFolder", 5 "mappings": { 6 "fields": { 7 "text": { 8 "type": "document", 9 "fields": { 10 "sv_FI": { 11 "analyzer": "diacriticFolder", 12 "type": "string" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "diacriticFolder", 21 "charFilters": [], 22 "tokenizer": { 23 "type": "keyword" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "icuFolding" 28 } 29 ] 30 } 31 ] 32 } 33 )
次のクエリでは、 ワイルドカード 演算子を使用して、text.sv_FI 分コレクションのavdelning フィールドで、 の前にタームの数の他の文字が続くタームを含むすべてのタームが検索されます。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "wildcard": { "query": "*avdelning*", "path": "text.sv_FI", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département" SCORE: 1 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object en_US: "The head of the sales department spoke first." fa_IR: "ابتدا رئیس بخش فروش صحبت کرد" sv_FI: "Först talade chefen för försäljningsavdelningen"
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' } } ]
MongoDB Search では、結果に _id: 1 と _id: 2 を含むドキュメントが返されます。ドキュメントには、クエリタームとして avdelning の後に _id: 1 を含むドキュメント内の他の文字が含まれ、そのドキュメントの前に _id: 2 付きのドキュメント内の他の文字が続くためです。 }。具体的には、 MongoDB 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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "textNormalizer", 5 "mappings": { 6 "fields": { 7 "message": { 8 "type": "string", 9 "analyzer": "textNormalizer" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "textNormalizer", 16 "charFilters": [], 17 "tokenizer": { 18 "type": "whitespace" 19 }, 20 "tokenFilters": [ 21 { 22 "type": "icuNormalizer", 23 "normalizationForm": "nfkc" 24 } 25 ] 26 } 27 ] 28 } 29 )
次のクエリは、分コレクションのmessageフィールドで1というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "1", "path": "message" } } } SCORE: 0.4342196583747864 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
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.' } ]
MongoDB Search では、ドキュメントターム1 の結果に _id: 2 が含まれるドキュメントが返されます。ドキュメントの messageフィールドに丸められた数字 ① が含まれていても、icuNormalizer トークンフィルターは 用のトークン 1 を作成するためです。 nfkc 正規化形式を使用するこの文字。次の表は、 MongoDB Search が nfkc 正規化形式を使用して結果内のドキュメント用に作成するトークン(検索可能なターム)と、他の正規化形式用に作成されるトークンを示しています。
正規化形式 | 出力トークン | マッチ |
|
| X |
|
| X |
|
| ✓ |
|
| ✓ |
keywordRepeat
keywordRepeatトークン フィルターは、受信した各トークンを キーワードとして、および非キーワードとして 2 回出力します。後続のトークン フィルターを使用して非キーワード トークンをステミングし、キーワード トークンを保持できます。これを使用して、完全一致をブーストしたり、語幹のある一致を検索したりできます。これは通常、porterSteming などのステミング フィルターと組み合わせて使用され、その後排除されます。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 keywordStemRemoverという名前のカスタムアナライザを使用して、分コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
ホワイトスペーストークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。
トークンに次のフィルターを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
keywordStemRemoverと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [ keywordRepeatを選択し、[ Add token filter ] をクリックします。
Add token filterをクリックして、次のトークン フィルターをカスタムアナライザに追加します。
removeDuplicates
porterStemming
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
keywordStemRemoverセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を、以下の例のように置き換えます。
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "keywordStemRemover", "type": "string" } } }, "analyzers": [ { "name": "keywordStemRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "porterStemming" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "title": { 8 "analyzer": "keywordStemRemover", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "keywordStemRemover", 16 "tokenFilters": [ 17 { 18 "type": "keywordRepeat" 19 }, 20 { 21 "type": "porterStemming" 22 }, 23 { 24 "type": "removeDuplicates" 25 } 26 ], 27 "tokenizer": { 28 "type": "whitespace" 29 } 30 } 31 ] 32 } 33 )
title次のクエリは、mee* wildcard演算子を使用して、分コレクションの フィールドで タームタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object title: "The team's weekly meeting" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object title: "The regular board meeting"
db.minutes.aggregate([ { "$search": { "index": "default", "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' } ]
MongoDB Search では、タイトルフィールドに meetingタームが含まれるドキュメントが返されます。 keywordRepeat トークン フィルターは、結果内のドキュメントに対して次のトークンを生成します。
タイトル | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
porterStemming トークン フィルターは、非キーワード トークンをルート 基本形式に縮小します。
タイトル | Stemmed Non-Keyword Tokens |
|---|---|
|
|
|
|
removeDuplicates トークン フィルターは、先行する keywordRepeat トークン フィルターによって生成されたストリーム内の重複するトークンを排除します。
タイトル | Tokens |
|---|---|
|
|
|
|
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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "analyzer": "kStemmer", 5 "mappings": { 6 "dynamic": true 7 }, 8 "analyzers": [ 9 { 10 "name": "kStemmer", 11 "tokenizer": { 12 "type": "standard" 13 }, 14 "tokenFilters": [ 15 { 16 "type": "lowercase" 17 }, 18 { 19 "type": "kStemming" 20 } 21 ] 22 } 23 ] 24 } 25 )
次のクエリは、分コレクションのtext.en_USフィールドでMeetingというタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "Meeting", "path": "text.en_US" } } } SCORE: 0.5960260629653931 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département"
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>' } } ]
MongoDB Search では、小文字の複数形のタームmeetings が含まれる _id: 1 を含むドキュメントが返されます。MongoDB Search は、小文字のトークン フィルターがトークン テキストを小文字に正規化し、kString トークン フィルターを使用してMongoDB Search が複数形の meetings をドキュメントの text.en_USフィールドに単数タームのクエリ用語と照合するため、ターム用語をドキュメントに照合します。MongoDB Search は、インデックスアナライザ(または指定されている場合は searchAnalyzer を使用)を使用してクエリタームを分析します。具体的には、 MongoDB 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を選択し、トークン フィルターに次のフィールドを構成します。
フィールド値min20Add 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 } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "text": { 7 "type": "document", 8 "dynamic": true, 9 "fields": { 10 "sv_FI": { 11 "type": "string", 12 "analyzer": "longOnly" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "longOnly", 21 "charFilters": [], 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [ 26 { 27 "type": "icuFolding" 28 }, 29 { 30 "type": "length", 31 "min": 20 32 } 33 ] 34 } 35 ] 36 } 37 )
次のクエリは、分コレクションのtext.sv_FIフィールドでforsaljningsavdelningenというタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "forsaljningsavdelningen", "path": "text.sv_FI" } } } SCORE: 0.13076457381248474 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object en_US: "The head of the sales department spoke first." fa_IR: "ابتدا رئیس بخش فروش صحبت کرد" sv_FI: "Först talade chefen för försäljningsavdelningen"
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' } } ]
MongoDB Search では、försäljningsavdelningenというタームを含む _id: 2 を含むドキュメントが返されます。MongoDB Search は、タームが 20 文字を超えているため、ドキュメントをタームと照合します。さらに、クエリタームforsaljningsavdelningen には発音区別符号が含まれていませんが、 MongoDB Search はドキュメント内の元のタームの発音区別タームを折りたたことで、クエリ用語をドキュメントと照合します。具体的には、 MongoDB Search は、_id: 2 を持つドキュメントに対して次のトークン(検索可能なターム)を作成します。
forsaljningsavdelningen
MongoDB 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
keywordLowererTokenization
nGram
[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を以下のように置き換えます。
{ "mappings": { "fields": { "title": { "analyzer": "keywordLowerer", "tokenization": "nGram", "type": "autocomplete" } } }, "analyzers": [ { "name": "keywordLowerer", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "analyzer": "keywordLowerer", 8 "tokenization": "nGram", 9 "type": "autocomplete" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "keywordLowerer", 16 "charFilters": [], 17 "tokenizer": { 18 "type": "keyword" 19 }, 20 "tokenFilters": [ 21 { 22 "type": "lowercase" 23 } 24 ] 25 } 26 ] 27 } 28 )
次のクエリは、オートコンプリート演算子を使用してtitleフィールドで文字standupを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "autocomplete": { "query": "standup", "path": "title" } } } SCORE: 0.9239386320114136 _id: “4” message: "write down your signature or phone №" page_updated_by: Object text: Object
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' } ]
MongoDB Search では、結果に _id: 4 を含むドキュメントが返されます。このドキュメントにタームとして standup が含まれているためです。MongoDB Search は、keywordトークナイザ、lowercase トークン フィルター、オートコンプリート タイプの nGram トークン化戦略を使用して、titleフィールドのトークンを作成します。具体的には、 MongoDB Search は keywordトークナイザを使用して string 全体を単一のトークンとしてトークン化します。これは string 全体の完全一致のみをサポートし、次に lowercase トークンフィルターを使用してトークンを小文字に変換します。結果内のドキュメント用に、 MongoDB Search はカスタムアナライザを使用して次のトークンを作成します。
ドキュメント ID | 出力トークン |
|
|
カスタムアナライザを適用すると、 MongoDB Search は n グラムのさらにトークンを作成します。MongoDB Searchはtitleフィールドをインデックス定義で指定されたオートコンプリートタイプとしてインデックス化するためです。MongoDB Search は、standup のトークンを含む n グラムのトークンを使用して、ドキュメントをクエリタームstandup に照合します。
次のインデックス定義は、 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" } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "message": { 7 "type": "string", 8 "analyzer": "lowerCaser" 9 } 10 } 11 }, 12 "analyzers": [ 13 { 14 "name": "lowerCaser", 15 "charFilters": [], 16 "tokenizer": { 17 "type": "standard" 18 }, 19 "tokenFilters": [ 20 { 21 "type": "icuNormalizer", 22 "normalizationForm": "nfkd" 23 }, 24 { 25 "type": "lowercase" 26 } 27 ] 28 } 29 ] 30 } 31 )
次のクエリは、message フィールドで sign-in というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "sign-in", "path": "message" } } } SCORE: 0.37036222219467163 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object SCORE: 0.37036222219467163 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object SCORE: 0.2633555233478546 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
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.' } ]
MongoDB Search では、クエリタームsign-in の結果に _id: 1、_id: 3、_id:
2 を含むドキュメントが返されます。これは、icuNormalizerトークナイザが最初にハイフン付きの単語を含むテキストを分割して個別のトークンを作成するが、 を保持するためです。ドキュメント内の元の文字大文字と小文字を区別し、lowercase トークンフィルターがトークンを小文字に変換します。MongoDB Search では、インデックスアナライザ(または指定されている場合は searchAnalyzer を使用)を使用してクエリタームを分析し、クエリタームを分裂、それをドキュメントと照合します。
正規化形式 | 出力トークン |
|
|
|
|
|
|
nGram
nGramトークン フィルターは、入力を設定されたサイズの n グラムにトークン化します。 シノニム (同意語) または オートコンプリート マッピング定義では nGram トークン フィルターは使用できません。
注意
regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、ngram トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | 生成された n グラムの最小長を指定する数値。 値は |
| integer | はい | 生成された n グラムの最大長を指定する数値。 値は |
| string | no |
デフォルト: |
例
次のインデックス定義は、title という名前のカスタムアナライザを使用して、分コレクションのtitleAutocomplete フィールドをインデックス化します。キーワード アナライザ を searchAnalyzer として指定します。カスタムアナライザ関数は、以下を指定します。
標準のトークナイザを適用して、単語の指定ルールに基づいてトークンを作成する。
トークンに一連のトークンフィルターを適用します。
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を選択し、トークン フィルターに次のフィールドを構成します。
フィールド値minGram4
maxGram7
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", "searchAnalyzer": "lucene.keyword" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" }, { "type": "nGram", "minGram": 4, "maxGram": 7 } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "type": "string", 8 "analyzer": "titleAutocomplete", 9 "searchAnalyzer": "lucene.keyword" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "titleAutocomplete", 16 "charFilters": [], 17 "tokenizer": { 18 "type": "standard" 19 }, 20 "tokenFilters": [ 21 { 22 "type": "englishPossessive" 23 }, 24 { 25 "type": "nGram", 26 "minGram": 4, 27 "maxGram": 7 28 } 29 ] 30 } 31 ] 32 } 33 )
次のクエリでは、ワイルドカード演算子を使用して、分コレクションのtitleフィールドでmeetというタームを検索し、その後に任意の数の他の文字が続く検索を行います。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "wildcard": { "query": "meet*", "path": "title", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object title: "The team's weekly meeting" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object title: "The regular board meeting"
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' } ]
MongoDB Search では、ドキュメントにタームmeeting が含まれているため、_id: 1 と _id: 3 を含むドキュメントが返されます。MongoDB Searchは次のトークン(検索可能なターム)を作成することでクエリ条件 meet* に一致します。
正規化形式 | 出力トークン |
|---|---|
|
|
|
|
注意
MongoDB Search では、termNotInBounds パラメータがデフォルトで omit に設定されているため、4 文字未満(the など)および 7 文字を超えるタームのトークンは作成されません。termNotInBounds パラメータの値を include に設定すると、 MongoDB 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" } ] } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "title": { "type": "string", "analyzer": "porterStemmer" } } }, "analyzers": [ { "name": "porterStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "porterStemming" } ] } ] })
次のクエリは、分コレクションのtitleフィールドでMeetというタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "Meet", "path": "title" } } } SCORE: 0.34314215183258057 _id: “1” message: "try to siGn-In" page_updated_by: Object text: Object SCORE: 0.34314215183258057 _id: “3” message: "try to sign-in" page_updated_by: Object text: Object
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' } ]
MongoDB Search では、_id: 1 と _id: 3 を含むドキュメントが返されます。これは、小文字のトークンフィルターがトークンテキストを小文字に正規化し、次に porterStemming トークンフィルターが meeting トークンから構成要素のサフィックスを除外して meet トークンを作成するためです。 MongoDB Search がクエリタームMeet に一致します。具体的には、 MongoDB Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリタームの Meet に照合します。
正規化形式 | 出力トークン |
|---|---|
|
|
|
|
regex
regex トークン フィルターは、各トークンに Java 正規表現構文を適用し、一致したものを指定した文字列に置き換えます。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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" } ] } ] }
db.minutes.createSearchIndex("default", { "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 ])
MongoDB Search ではクエリ結果は返されません。page_updated_by.emailフィールドではメールアドレスに「example.com」という単語が含まれています。MongoDB Search は、カスタムアナライザに提供された正規式に一致する文字列を redacted という単語でトークン化するため、 MongoDB Search はクエリタームをどのドキュメントにも一致させません。
removeDuplicates
removeDuplicates トークン フィルターは、連続する重複トークンを排除します。これは、同じ位置にある同じタームのトークンです。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルターを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 duplicateRemoverという名前のカスタムアナライザを使用して、分コレクションのtitleフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
ホワイトスペーストークナイザ を適用して、単語間の空白の発生に基づいてトークンを作成します。
トークンに次のフィルターを適用します。
トークン フィルターを使用して、キーワードとして、および非キーワードとしてのトークンを 2 回作成します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
removeDuplicatesと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [whitespace] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [ keywordRepeatを選択し、[ Add token filter ] をクリックします。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [removeDuplicates] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
removeDuplicatesセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を、以下の例のように置き換えます。
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "duplicateRemover", "type": "string" } } }, "analyzers": [ { "name": "duplicateRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] }
db.minutes.createSearchIndex( "default", { "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "duplicateRemover", "type": "string" } } }, "analyzers": [ { "name": "duplicateRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] } )
title次のクエリは、mee* wildcard演算子を使用して、分コレクションの フィールドで タームタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object title: "The team's weekly meeting" SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object text: Object title: "The regular board meeting"
db.minutes.aggregate([ { "$search": { "index": "default", "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' } ]
MongoDB Search では、タイトルフィールドに meetingタームが含まれるドキュメントが返されます。 keywordRepeat トークン フィルターは、結果内のドキュメントに対して次のトークンを生成します。
タイトル | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
removeDuplicates トークン フィルターは、ストリーム内の重複するトークンを削除します。
逆
reverseトークン フィルターは、各 string トークンを逆にします。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルターを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 keywordReverseという名前のカスタムアナライザを使用して、分コレクション内のpage_updated_by.emailフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
キーワード トークナイザを適用して、文字列全体を単一のタームとしてトークン化します。
string トークンを逆にするには、
reverseトークンフィルターを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
reverseAnalyzerと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンから [reverse] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
reverseAnalyzerセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を、以下の例のように置き換えます。
{ "analyzer": "keywordReverse", "mappings": { "dynamic": true }, "analyzers": [ { "name": "keywordReverse", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "reverse" } ] } ] }
db.minutes.createSearchIndex("default", { "analyzer": "keywordReverse", "mappings": { "dynamic": true }, "analyzers": [ { "name": "keywordReverse", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "reverse" } ] } ] })
次のクエリは、page_updated_by.email ワイルドカード 演算子を使用して 分 コレクションの フィールドで、逆の順序で文字@example.com に先行する文字と一致するものを検索します。reverseトークン フィルターにより、先頭のワイルドカード クエリを高速化できます。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "wildcard": { "query": "*@example.com", "path": "page_updated_by.email", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object SCORE: 1 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object last_name: "OHRBACH" first_name: "Noël" email: "ohrbach@example.com" phone: "(123) 456 0987" text: Object SCORE: 1 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object SCORE: 1 _id: "4" message: "write down your signature or phone №" page_updated_by: Object last_name: "LEVINSKI" first_name: "François" email: "levinski@example.com" phone: "123-456-8907" text: Object
.. io-code-block:: :copyable: true .. input:: :language: json 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, } } ]) .. output:: :language: json [ { _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' } } ]
上記のクエリでは、 MongoDB Search は ワイルドカード クエリにカスタムアナライザを適用して、クエリを次のように変換します。
moc.elpmaxe@*
次に、 MongoDB Search はインデックス付きトークンに対してクエリを実行します。これも逆方向です。具体的には、 MongoDB Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリタームの moc.elpmaxe@* に照合します。
正規化形式 | 出力トークン |
|---|---|
|
|
|
|
|
|
|
|
単一選択
shingleトークン フィルターは、一連のトークンからシングルスディング(トークン n グラム)を構築します。 シノニムまたはオートコンプリートマッピング定義ではshingleトークン フィルターは使用できません。
注意
regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、shingle トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| integer | はい | シングルあたりのトークンの最小数。 |
| integer | はい | 1 秒あたりのトークンの最大数。 |
例
分コレクションの page_updated_by.emailフィールドの次のインデックス定義例では、minutes emailAutocompleteIndex と emailAutocompleteSearch の 2 つのカスタムアナライザを使用して、オートコンプリートのような機能を実装しています。MongoDB Search は、インデックス作成時に emailAutocompleteIndexアナライザを使用して次のようにします。
MongoDB Search は、検索中に emailAutocompleteSearchアナライザを使用して次のようにします。
フィールド内の
@文字をATに置き換えホワイトスペース トークナイザトークナイザを使用したトークンの作成
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
emailAutocompleteIndexと入力します。Character Filtersを展開し、 をクリックしますAdd character filter 。
ドロップダウンからmappingを選択し、 をクリックします。 Add mapping 。
次のキーと値を入力します。
キー値@ATAdd character filterをクリックして、文字フィルターをカスタムアナライザに追加します。
Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [ whitespaceを選択し、 maxTokenLengthフィールドに
15を入力します。Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからshingleを選択し、次のフィールドを設定します。
フィールドフィールド値minShingleSize2
minShingleSize3
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンからedgeGramを選択し、トークン フィルターに次のフィールドを構成します。
フィールドフィールド値minGram2
maxGram15
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
Addをクリックして、カスタムアナライザをインデックスに追加します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
emailAutocompleteSearchと入力します。Character Filtersを展開し、 をクリックしますAdd character filter 。
ドロップダウンからmappingを選択し、 をクリックします。 Add mapping 。
次のキーと値を入力します。
キー値@ATAdd 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 }
db.minutes.createSearchIndex("default", { "analyzer": "lucene.keyword", "mappings": { "dynamic": true, "fields": { "page_updated_by": { "type": "document", "fields": { "email": { "type": "string", "analyzer": "emailAutocompleteIndex", "searchAnalyzer": "emailAutocompleteSearch" } } } } }, "analyzers": [ { "name": "emailAutocompleteIndex", "charFilters": [ { "mappings": { "@": "AT" }, "type": "mapping" } ], "tokenizer": { "maxTokenLength": 15, "type": "whitespace" }, "tokenFilters": [ { "maxShingleSize": 3, "minShingleSize": 2, "type": "shingle" }, { "maxGram": 15, "minGram": 2, "type": "edgeGram" } ] }, { "name": "emailAutocompleteSearch", "charFilters": [ { "mappings": { "@": "AT" }, "type": "mapping" } ], "tokenizer": { "maxTokenLength": 15, "type": "whitespace" } } ] })
次のクエリは、分コレクションのpage_updated_by.emailフィールドでメールアドレスを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "auerbach@ex", "path": "page_updated_by.email" } } } SCORE: 0.8824931383132935 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "auerbach@ex", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "text.es_MX": 1 } } ])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]
MongoDB Search は emailAutocompleteSearchアナライザを使用して検索トークンを作成し、 emailAutocompleteIndexアナライザを使用して作成したインデックストークンと照合します。次の表は、 MongoDB Search が作成する検索トークンとインデックストークン(最大 15 文字)を示しています。
検索トークン | Index Tokens |
|---|---|
|
|
refresh
snowballStemming トークンは、Snowball で生成されたステマーを使用してステミング トークンをフィルタリングします。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
| string | はい | 次の値が有効です。
|
例
次のインデックス定義は、 frenchStemmerという名前のカスタムアナライザを使用して、分コレクションのtext.fr_CAフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のトークン フィルターを適用します。
トークンを小文字に変換する小文字トークン フィルター 。
frenchsnowballStemmingの バリアント トークン フィルター を使用して、単語のステミングを行います。
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" } ] } ] }
db.minutes.createSearchIndex("default", { "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というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "réunion", "path": "text.fr_CA" } } } SCORE: 0.13076457381248474 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département"
db.minutes.aggregate([ { "$search": { "index": "default", "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' } } ]
MongoDB Search では、結果に _id: 1 を含むドキュメントが返されます。MongoDB 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" } ] } ] }
db.minutes.createSearchIndex("default", { "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を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "punto", "path": "text.es_MX" } } } SCORE: 0.13076457381248474 _id: "4" message: "write down your signature or phone №" page_updated_by: Object text: Object en_US: "<body>This page has been updated with the items on the agenda.</body>" es_MX: "La página ha sido actualizada con los puntos de la agenda." pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
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.', } } ]
MongoDB Search では、ドキュメントの text.es_MXフィールドに複数形のタームpuntos が含まれているため、_id: 4 を含むドキュメントが返されます。MongoDB Search は、 というタームから複数形(s)を語幹により puntosを punto として分析するため、クエリタームpunto にこのドキュメントを照合します。 具体的には、 MongoDB Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、それを使用してクエリタームに一致させます。
ドキュメント ID | 出力トークン |
|
|
stempel
stempel トークン フィルターは、lucene のデフォルトのステマー テーブルを使用して、ポーランド言語の単語のステミングを行います。小文字のテキストが必要です。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | このトークン フィルター タイプを識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義は、 stempelStemmerという名前のカスタムアナライザを使用して、分コレクションのtext.pl_PLフィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のフィルターを適用します。
Custom Analyzersセクションで、 Add Custom Analyzerをクリックします。
Create Your Ownラジオボタンを選択し、Next をクリックします。
Analyzer Nameフィールドに
stempelAnalyzerと入力します。Tokenizerが折りたたまれている場合は展開します。
ドロップダウンから [standard] を選択します。
Token Filtersを展開し、 をクリックしますAdd token filter 。
ドロップダウンからlowercaseを選択し、 Add token filterをクリックしてトークンフィルターをカスタムアナライザに追加します。
をクリックしますAdd token filterを使用して別のトークン フィルターを追加します。
ドロップダウンから [spanishPluralStemming] を選択します。
Add token filterをクリックして、トークンフィルターをカスタムアナライザに追加します。
カスタムアナライザを作成するには、 Addをクリックします。
Field Mappingsセクションで、 Add Field Mappingをクリックして、タイトルフィールドにカスタムアナライザを適用します。
Field Name ドロップダウンからタイトルを選択し、Data Type ドロップダウンからstringを選択します。
データタイプのプロパティ
stempelAnalyzerセクションで、Index Analyzer Search Analyzerドロップダウンと ドロップダウンから [ を選択します。[ Addをクリックし、 Save Changesをクリックします。
デフォルトのインデックス定義を、以下の例のように置き換えます。
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "stempelAnalyzer" } } }, "analyzers": [ { "name": "stempelAnalyzer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "stempel" } ] } ] }
db.minutes.createSearchIndex("default", { "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を検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "punkt", "path": "text.pl_PL" } } } SCORE: 0.5376965999603271 _id: "4" text: Object pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
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.' } } ]
MongoDB Search では、ドキュメントの text.pl_PLフィールドに複数形のタームpunkty が含まれているため、_id: 4 を含むドキュメントが返されます。MongoDB Search は、 というタームから複数形(y)を語幹により punktyを punkt として分析するため、クエリタームpunkt にこのドキュメントを照合します。 具体的には、 MongoDB 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,atAdd 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"] } ] } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "text": { 7 "type": "document", 8 "fields": { 9 "en_US": { 10 "type": "string", 11 "analyzer": "stopwordRemover" 12 } 13 } 14 } 15 } 16 }, 17 "analyzers": [ 18 { 19 "name": "stopwordRemover", 20 "charFilters": [], 21 "tokenizer": { 22 "type": "whitespace" 23 }, 24 "tokenFilters": [ 25 { 26 "type": "stopword", 27 "tokens": ["is", "the", "at"] 28 } 29 ] 30 } 31 ] 32 } 33 )
次のクエリは、分のコレクションのtext.en_USフィールドでフレーズhead of the salesを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "phrase": { "query": "head of the sales", "path": "text.en_US" } } } SCORE: 1.5351942777633667 _id: "2" message: "do not forget to SIGN-IN. See ① for details." page_updated_by: Object text: Object
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 ])
[ { _id: 2, text: { en_US: 'The head of the sales department spoke first.' } } ]
MongoDB Search では、en_USフィールドにクエリタームが含まれているため、_id: 2 を含むドキュメントが返されます。MongoDB Search は分析中にドキュメント内のストップワード the のトークンを作成しませんが、クエリタームに一致させることができます。これは、string フィールドでは、インデックスターム(または(searchAnalyzer を使用して)、クエリタームからストップワードを削除し、 MongoDB Search がクエリタームをドキュメントに照合できるようにします。具体的には、 MongoDB 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" } ] } ] }
db.minutes.createSearchIndex("default", { "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*の前に付き、その後に任意の数の他の文字が続くフレーズを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "wildcard": { "query": "*department meetings*", "path": "text.en_US", "allowAnalyzedField": true } } } SCORE: 1 _id: "1" message: "try to siGn-In" page_updated_by: Object text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "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 ]
MongoDB Search では、en_USフィールドにクエリターム「 department meetings」が含まれているため、_id: 1 を含むドキュメントが返されます。MongoDB Search は、結果のドキュメントに対して次のトークンを作成します。これは、 MongoDB Search が HTML タグを削除し、string 全体に対して単一のトークンを作成し、トークン内の先頭と末尾の空白を削除したことを示しています。
ドキュメント ID | 出力トークン |
|---|---|
|
|
[wordDelimiterGraph]
wordDelimiterGraphトークン フィルターは、構成されたルールに基づいてトークンをサブトークンに分割します。 このトークン フィルターは、このトークン フィルターが境界を決定するために使用する単語内区切り文字の多くを削除するため、標準のトークナイザではこのトークン フィルターを使用しないことをお勧めします。
注意
regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、wordDelimiterGraph トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。
属性
これには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| 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 } } ] } ] }
db.minutes.createSearchIndex("default", { "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というタームを検索します。
インデックスの Query ボタンをクリックします。
クエリを編集するには、Edit Query をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Search をクリックします。
{ "$search": { "index": "default", "text": { "query": "App2", "path": "title" } } } SCORE: 0.5104123950004578 _id: "4" message: "write down your signature or phone №" page_updated_by: Object text: Object
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' } ]
MongoDB Search では、ドキュメントの titleフィールドに App2 が含まれているため、_id: 4 を含むドキュメントが返されます。MongoDB Search は、大文字と小文字の変更でトークンを分割し、分裂によって作成されたアルファベットのみを含むトークンを削除します。また、インデックスアナライザ(または指定されている場合は searchAnalyzer を使用)を使用してクエリタームを分析し、大文字と小文字の変更時に単語を分裂、2 の前にある文字を削除します。具体的には、 MongoDB Search は、protectedWords オプションと delimiterOptions オプションに対して _id : 4 を使用してドキュメントに対して次のトークンを作成します。
wordDelimiterGraph オプション | 出力トークン |
|---|---|
|
|
|
|