トークン フィルターは、次のような操作を実行します。
ステミング 。これにより、「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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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フィールドに次の表に示す値を選択します。
フィールド値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" } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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を選択し、 フィールドに次の表に示す値を入力します。
フィールド値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 } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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.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" } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 |
|
| ✓ |
|
| ✓ |
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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を選択し、トークン フィルターに次のフィールドを構成します。
フィールド値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 } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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
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" } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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を選択し、トークン フィルターに次のフィールドを構成します。
フィールド値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", "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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 はクエリタームをどのドキュメントにも一致させません。
逆
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 。
次のキーと値を入力します。
キー値@
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 }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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
フィールドをインデックス化します。 カスタムアナライザは、以下を指定します。
標準のトークナイザ を適用して、ワードブレークルールに基づいてトークンを作成します。
トークンに次のトークン フィルターを適用します。
トークンを小文字に変換する小文字トークン フィルター 。
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" } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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
,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"] } ] } ] }
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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 をクリックします。
クエリ バーをクリックし、データベースとコレクションを選択します。
デフォルトのクエリを以下のように置き換え、Find をクリックします。
{ "$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 オプション | 出力トークン |
---|---|
|
|
|
|