Docs Menu
Docs Home
/
Atlas
/ / / / /

トークン フィルター

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

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

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

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

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

MongoDB Search は、次のタイプのトークン フィルターをサポートしています。

  • as読み取り

  • dwitchMoあります

  • edgeGram

  • englishPassive

  • flattenGraph

  • ic ページ フォールディング

  • icuNormalizer

  • kStemming

  • Length

  • 小文字

  • regex

  • 単一選択

  • refresh

  • spanishPluralSteming

  • stempel

  • ストップワード

  • trigger

  • [wordDelimiterGraph]

次のサンプルインデックス定義とクエリでは、 という名前の minutesサンプルコレクションを使用します。これらの例に従うには、クラスターにminutes コレクションをロードし、 「Create a Search Index MongoDB Search インデックスの作成 」チュートリアルの手順に従って、Atlas UIの ページに移動します。次に、データソースとしてminutes コレクションを選択し、例手順に従って、Atlas UIまたはmongosh を使用してインデックスを作成します。


➤ [言語の選択] ドロップダウン メニューを使用して、このページの例の言語を設定します。


asciiFolding トークン フィルターは、基本ラテン Unicode ブロックに含まれない英字、数字、記号などの Unicode 文字を、可能であれば ASCII に相当する文字に変換します。

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

名前
タイプ
必須
説明

type

string

はい

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

originalTokens

string

no

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

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

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

デフォルト: omit

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"dynamic": false,
"fields": {
"page_updated_by": {
"type": "document",
"dynamic": false,
"fields": {
"first_name": {
"type": "string",
"analyzer": "asciiConverter"
}
}
}
}
},
"analyzers": [
{
"name": "asciiConverter",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "asciiFolding"
}
]
}
]
}
1db.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 に相当する名前を使用して名前を検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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 と一致するために使用したためです。

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

page_updated_by.first_name

Sian

daitchMokotoffSoundexトークン フィルターは、アルゴリズム:このフィルターは、入力ごとに複数のエンコーディングを生成できます。各エンコードされたトークンは 6 桁の数字です。

注意

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

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

名前
タイプ
必須
説明

type

string

はい

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

originalTokens

string

no

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

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

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

デフォルト: include

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

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

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

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

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

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

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

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

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

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

    フィールド

    originalTokens

    include

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

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

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

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

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

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

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

{
"mappings": {
"dynamic": false,
"fields": {
"page_updated_by": {
"type": "document",
"dynamic": false,
"fields": {
"last_name": {
"type": "string",
"analyzer": "dmsAnalyzer"
}
}
}
}
},
"analyzers": [
{
"name": "dmsAnalyzer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "daitchMokotoffSoundex",
"originalTokens": "include"
}
]
}
]
}
1db.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に似たタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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 桁の数字(097400097500)を使用してコード化されているためです。次の表は、結果内のドキュメントに対してMongoDB Search が作成するトークン(検索可能なタームと 6 桁のエンコーディング)を示しています。

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

"_id": 1

AUERBACH, 097400, 097500

"_id": 2

OHRBACH, 097400, 097500

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

注意

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

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

regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、edgeGram トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。

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

名前
タイプ
必須
説明

type

string

はい

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

minGram

integer

はい

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

maxGram

integer

はい

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

termNotInBounds

string

no

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

  • include

  • omit

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

デフォルト: omit

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    フィールド

    minGram

    4

    maxGram

    7

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

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

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

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

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

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

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

{
"analyzer": "titleAutocomplete",
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "string",
"analyzer": "titleAutocomplete"
}
}
},
"analyzers": [
{
"name": "titleAutocomplete",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuFolding"
},
{
"type": "edgeGram",
"minGram": 4,
"maxGram": 7
}
]
}
]
}
1db.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で始まり、その後に任意の数の他の文字が続くタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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
出力トークン

"_id": 1

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

"_id": 3

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "englishPossessiveStemmer"
}
}
},
"analyzers": [
{
"name": "englishPossessiveStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
}
]
}
]
}
1db.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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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
出力トークン

"_id": 1

The, team, weekly, meeting

"_id": 2

The, check, in, with, sales, team

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      フィールド

      delimiterOptions.generateWordParts

      true

      delimiterOptions.preserveOriginal

      true

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "wordDelimiterGraphFlatten"
}
}
},
"analyzers": [
{
"name": "wordDelimiterGraphFlatten",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "wordDelimiterGraph",
"delimiterOptions" : {
"generateWordParts" : true,
"preserveOriginal" : true
},
"protectedWords": {
"words": [
"SIGN_IN"
],
"ignoreCase": false
}
},
{
"type": "flattenGraph"
}
]
}
]
}
1db.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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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

出力トークン

_id: 3

try, to, sign-in, sign, in

icuFoldingトークン フィルターは、アクセントの削除、大文字と小文字のフォールディング、標準重複のフォールディングなど、Unicode30 テクニカル レポート の文字フォールディングを適用します。

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"analyzer": "diacriticFolder",
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"sv_FI": {
"analyzer": "diacriticFolder",
"type": "string"
}
}
}
}
},
"analyzers": [
{
"name": "diacriticFolder",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "icuFolding"
}
]
}
]
}
1db.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の前に任意の数の他の文字が続くタームを含むすべてのタームが検索されます。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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
出力トークン

_id: 1

den har sidan behandlar avdelningsmoten

_id: 2

forst talade chefen for forsaljningsavdelningen

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

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

名前
タイプ
必須
説明

type

string

はい

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

normalizationForm

string

no

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

  • nfd (標準除算)

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

  • nfkd (互換性の縮小)

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

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

デフォルト: nfc

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"analyzer": "textNormalizer",
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "textNormalizer"
}
}
},
"analyzers": [
{
"name": "textNormalizer",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "icuNormalizer",
"normalizationForm": "nfkc"
}
]
}
]
}
1db.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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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 正規化形式を使用して結果内のドキュメント用に作成するトークン(検索可能なターム)と、他の正規化形式用に作成されるトークンを示しています。

正規化形式

出力トークン

マッチ 1

nfd

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

X

nfc

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

X

nfkd

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

nfkc

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"analyzer": "kStemmer",
"mappings": {
"dynamic": true
},
"analyzers": [
{
"name": "kStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "kStemming"
}
]
}
]
}
1db.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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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トークン フィルターは、長すぎる または 短いトークンを排除します。

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

名前
タイプ
必須
説明

type

string

はい

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

min

integer

no

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

デフォルト: 0

max

integer

no

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

デフォルト: 255

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    フィールド

    min

    20

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"text": {
"type": "document",
"dynamic": true,
"fields": {
"sv_FI": {
"type": "string",
"analyzer": "longOnly"
}
}
}
}
},
"analyzers": [
{
"name": "longOnly",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuFolding"
},
{
"type": "length",
"min": 20
}
]
}
]
}
1db.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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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トークンフィルターは、トークンテキストを小文字に正規化します。

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

    プロパティ名

    Analyzer

    keywordLowerer

    Tokenization

    nGram

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

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

{
"mappings": {
"fields": {
"title": {
"analyzer": "keywordLowerer",
"tokenization": "nGram",
"type": "autocomplete"
}
}
},
"analyzers": [
{
"name": "keywordLowerer",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "lowercase"
}
]
}
]
}
1db.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を検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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

出力トークン

_id: 4

the daily huddle on the standupapp2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"message": {
"type": "string",
"analyzer": "lowerCaser"
}
}
},
"analyzers": [
{
"name": "lowerCaser",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "icuNormalizer",
"normalizationForm": "nfkd"
},
{
"type": "lowercase"
}
]
}
]
}
1db.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 というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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 を使用)を使用してクエリタームを分析し、クエリタームを分裂、それをドキュメントと照合します。

正規化形式

出力トークン

_id: 1

try, to, sign, in

_id: 3

try, to, sign, in

_id: 2

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

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

注意

regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、ngram トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。

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

名前
タイプ
必須
説明

type

string

はい

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

minGram

integer

はい

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

maxGram

integer

はい

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

termNotInBounds

string

no

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

  • include

  • omit

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

デフォルト: omit

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    フィールド

    minGram

    4

    maxGram

    7

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "titleAutocomplete",
"searchAnalyzer": "lucene.keyword"
}
}
},
"analyzers": [
{
"name": "titleAutocomplete",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
},
{
"type": "nGram",
"minGram": 4,
"maxGram": 7
}
]
}
]
}
1db.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というタームを検索し、その後に任意の数の他の文字が続く検索を行います。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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* に一致します。

正規化形式
出力トークン

_id: 2

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

_id: 3

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

注意

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "porterStemmer"
}
}
},
"analyzers": [
{
"name": "porterStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "porterStemming"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "porterStemmer"
}
}
},
"analyzers": [
{
"name": "porterStemmer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "porterStemming"
}
]
}
]
})

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

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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 に照合します。

正規化形式
出力トークン

_id: 1

the, team', weekli, meet

_id: 3

the, regular, board, meet

regex トークン フィルターは、各トークンに Java 正規表現構文を適用し、一致したものを指定した文字列に置き換えます。

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

名前
タイプ
必須
説明

type

string

はい

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

pattern

string

はい

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

replacement

string

はい

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

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

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

matches

string

はい

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

  • all

  • first

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"analyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"page_updated_by": {
"type": "document",
"fields": {
"email": {
"type": "string",
"analyzer": "emailRedact"
}
}
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "emailRedact",
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"matches": "all",
"pattern": "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$",
"replacement": "redacted",
"type": "regex"
}
]
}
]
}
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 の前に任意の数の他の文字が続くタームを検索します。

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

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  13. [ 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トークン フィルターにより、先頭のワイルドカード クエリを高速化できます。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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@* に照合します。

正規化形式
出力トークン

_id: 1

moc.elpmaxe@hcabreua

_id: 2

moc.elpmaxe@kcabrho

_id: 3

moc.elpmaxe@yksniwel

_id: 4

moc.elpmaxe@iksnivel

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

注意

regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、shingle トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。

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

名前
タイプ
必須
説明

type

string

はい

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

minShingleSize

integer

はい

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

maxShingleSize

integer

はい

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

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

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

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

  • シングル トークン

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

MongoDB Search は、検索中に emailAutocompleteSearchアナライザを使用して次のようにします。

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

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

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

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

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

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

    キー

    @

    AT

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

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

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

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

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

    フィールド
    フィールド値

    minShingleSize

    2

    minShingleSize

    3

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

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

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

    フィールド
    フィールド値

    minGram

    2

    maxGram

    15

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

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

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

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

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

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

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

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

    キー

    @

    AT

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

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

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

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

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

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

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

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

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

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

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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

auerbachATexamp

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

stemmerName

string

はい

次の値が有効です。

  • arabic

  • armenian

  • basque

  • catalan

  • danish

  • dutch

  • english

  • estonian

  • finnish

  • french

  • german

  • german2 (廃止予定)

  • hungarian

  • irish

  • italian

  • lithuanian

  • norwegian

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

  • portuguese

  • romanian

  • russian

  • spanish

  • swedish

  • turkish

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"fr_CA": {
"type": "string",
"analyzer": "frenchStemmer"
}
}
}
}
},
"analyzers": [
{
"name": "frenchStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "snowballStemming",
"stemmerName": "french"
}
]
}
]
}
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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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
出力トークン

_id: 1

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"analyzer": "spanishPluralStemmer",
"mappings": {
"fields": {
"text: {
"type": "document",
"fields": {
"es_MX": {
"analyzer": "spanishPluralStemmer",
"searchAnalyzer": "spanishPluralStemmer",
"type": "string"
}
}
}
}
},
"analyzers": [
{
"name": "spanishPluralStemmer",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "lowercase"
},
{
"type": "spanishPluralStemming"
}
]
}
]
}
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を検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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)を語幹により puntospunto として分析するため、クエリタームpunto にこのドキュメントを照合します。 具体的には、 MongoDB Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、それを使用してクエリタームに一致させます。

ドキュメント ID

出力トークン

_id: 4

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

stempel トークン フィルターは、lucene のデフォルトのステマー テーブルを使用して、ポーランド言語の単語のステミングを行います。小文字のテキストが必要です。

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  15. [ 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を検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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)を語幹により punktypunkt として分析するため、クエリタームpunkt にこのドキュメントを照合します。 具体的には、 MongoDB Search は結果内のドキュメントに対して次のトークン(検索可能なターム)を作成し、クエリタームの に照合します。

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

_id: 4

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

tokens

文字列の配列

はい

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

ignoreCase

ブール値

no

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

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

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

デフォルト: true

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

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

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

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

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

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

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

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

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

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

    is, the, at

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"text": {
"type" : "document",
"fields": {
"en_US": {
"type": "string",
"analyzer": "stopwordRemover"
}
}
}
}
},
"analyzers": [
{
"name": "stopwordRemover",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "stopword",
"tokens": ["is", "the", "at"]
}
]
}
]
}
1db.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を検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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
1db.minutes.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "query": "head of the sales",
6 "path": "text.en_US"
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 1,
13 "text.en_US": 1
14 }
15 }
16])
[
{
_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
出力トークン

_id: 2

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

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

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

名前
タイプ
必須
説明

type

string

はい

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"en_US": {
"type": "string",
"analyzer": "tokenTrimmer"
}
}
}
}
},
"analyzers": [
{
"name": "tokenTrimmer",
"charFilters": [{
"type": "htmlStrip",
"ignoredTags": ["a"]
}],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "trim"
}
]
}
]
}
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*の前に付き、その後に任意の数の他の文字が続くフレーズを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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"
1db.minutes.aggregate([
2 {
3 "$search": {
4 "wildcard": {
5 "query": "*department meetings*",
6 "path": "text.en_US",
7 "allowAnalyzedField": true
8 }
9 }
10 },
11 {
12 "$project": {
13 "_id": 1,
14 "text.en_US": 1
15 }
16 }
17])
1[
2 {
3 _id: 1,
4 text: { en_US: '<head> This page deals with department meetings. </head>' }
5 }
6]

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

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

_id: 1

This page deals with department meetings.

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

注意

regex(MongoDB Search 演算子) または wildcard 演算子 を使用するクエリでは、入力トークンごとに複数の出力トークンが生成されるため、wordDelimiterGraph トークンフィルターを searchAnalyzer として使用することはできません。インデックス定義で searchAnalyzer として別のアナライザを指定します。

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

名前
タイプ
必須
説明

type

string

はい

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

delimiterOptions

オブジェクト

no

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

デフォルト: {}

delimiterOptions
.generateWordParts

ブール値

no

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

デフォルト: true

delimiterOptions
.generateNumberParts

ブール値

no

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

デフォルト: true

delimiterOptions
.concatenateWords

ブール値

no

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

デフォルト: false

delimiterOptions
.concatenateNumbers

ブール値

no

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

デフォルト: false

delimiterOptions
.concatenateAll

ブール値

no

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

デフォルト: false

delimiterOptions
.preserveOriginal

ブール値

no

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

デフォルト: true

delimiterOptions
.splitOnCaseChange

ブール値

no

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

デフォルト: true

delimiterOptions
.splitOnNumerics

ブール値

no

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

デフォルト: true

delimiterOptions
.stemEnglishPossessive

ブール値

no

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

デフォルト: true

delimiterOptions
.ignoreKeywords

ブール値

no

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

デフォルト: false

protectedWords

オブジェクト

no

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

デフォルト: {}

protectedWords
.words

配列

条件付き

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

protectedWords
.ignoreCase

ブール値

no

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

デフォルト: true

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
"mappings": {
"fields": {
"title": {
"type": "string",
"analyzer": "wordDelimiterGraphAnalyzer"
}
}
},
"analyzers": [
{
"name": "wordDelimiterGraphAnalyzer",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"type": "wordDelimiterGraph",
"protectedWords": {
"words": ["is", "the", "at"],
"ignoreCase": false
},
"delimiterOptions" : {
"generateWordParts" : false,
"splitOnCaseChange" : true
}
}
]
}
]
}
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というタームを検索します。

  1. インデックスの Query ボタンをクリックします。

  2. クエリを編集するには、Edit Query をクリックします。

  3. クエリ バーをクリックし、データベースとコレクションを選択します。

  4. デフォルトのクエリを以下のように置き換え、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 オプション
出力トークン

protectedWords

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

delimiterOptions

The, daily, huddle, on, 2

戻る

トークナイザ