文字フィルターは、テキストを一度に 1 文字ずつ検査し、フィルタリング操作を実行します。 文字フィルターにはタイプ フィールドが必要で、一部の文字フィルターには追加のオプションも使われます。
"charFilters": [ { "type": "<filter-type>", "<additional-option>": <value> } ]
このページのサンプルインデックス定義とクエリでは、minutes という名前の サンプルコレクション を使用します。これらの例を試すには、クラスターに minutes コレクションを読み込み、「MongoDB Search インデックスの作成」チュートリアルの手順に従って Atlas UI の Create a Search Index ページに移動します。次に、minutes コレクションをデータソースとして選択し、例の手順に従って Atlas UI から、または mongosh を使用してインデックスを作成します。
➤ [インターフェースの選択] ドロップダウン メニューを使用して、このページの例を実行する方法を設定します。
文字フィルタータイプ
MongoDB Search は次のタイプの文字フィルターをサポートしています。
htmlStop
htmlStrip文字フィルターは HTML 構造を削除します。
属性
htmlStrip文字フィルターには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | この文字フィルター型を識別する、人間が判読できるラベル。 値は |
| 文字列の配列 | はい | フィルタリングから除外する HTML タグを含むリスト。 |
例
次のインデックス定義の例では、 htmlStrippingAnalyzerという名前のカスタムアナライザを使用して、分コレクションのtext.en_USフィールドにインデックスを作成します。 カスタムアナライザは、以下を指定します。
htmlStrip文字フィルタを使用して、aタグを除くすべての HTML タグをテキストから削除します。Generate tokens based on word break rules from the Unicode Text Segmentation algorithm using the standard tokenizer.
次のクエリは、 minutesコレクションのtext.en_USフィールドで string headの出現を検索します。
MongoDB Search では、文字列 head が HTML タグ <head> の一部であるため、_id: 1 を含むドキュメントは返されません。 _id: 3 を含むドキュメントには HTML タグが含まれていますが、文字列 head は他の場所にあるため、ドキュメントは一致します。 次の表は、htmlStrippingAnalyzer を使用して、分コレクション内のドキュメント _id: 1、_id: 2、_id: 3 の text.en_USフィールド値に対してMongoDB Search が生成するトークンを示しています。
ドキュメント ID | 出力トークン |
|---|---|
|
|
|
|
|
|
icuNormalize
icuNormalize 文字フィルターは、ICU 正規表現を使用してテキストを正規化します。これは、 Lucene のICUNormazer2CharFilterに基づいています。
属性
icuNormalize 文字フィルターには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | この文字フィルター型を識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義の例では、 normalizingAnalyzerという名前のカスタムアナライザを使用して、分コレクションのmessageフィールドにインデックスを作成します。 カスタムアナライザは、以下を指定します。
icuNormalize文字フィルターを使用して、messageフィールド値のテキストを正規化します。空白トークナイザ を使用して、単語間の空白の発生に基づいてフィールド内の単語をトークン化します。
次のクエリは、 minutesコレクションのmessageフィールドで string no (数値)の出現を検索します。
MongoDB Search が _id: 4 を含むドキュメントをクエリタームno と照合したのは、icuNormalize 文字フィルターを使用してフィールドの数字記号 № を正規化し、「数字」という単語のその型上の省略形用のトークン no を作成したためです。 ".MongoDB Search は、normalizingAnalyzer を使用して、ドキュメント_id: 4 の messageフィールド値に対して次のトークンを生成します。
ドキュメント ID | 出力トークン |
|---|---|
|
|
マッピング
mapping文字フィルターは、文字にユーザー指定の正規化マッピングを適用します。これは Lucene の MappingCharFilter に基づいています。
属性
mapping文字フィルターには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | この文字フィルタータイプを識別する、人間が判読できるラベル。 値は |
| オブジェクト | はい | マッピングのコンマ区切りリストを含むオブジェクト。 マッピングは、ある文字または文字のグループを別の文字に置き換える必要があることを |
例
次のインデックス定義の例では、 mappingAnalyzerという名前のカスタムアナライザを使用して、分コレクションのpage_updated_by.phoneフィールドにインデックスを作成します。 カスタムアナライザは、以下を指定します。
mapping文字フィルターを使用して、ハイフン(-)、ドット(.)、開始括弧(()、閉じ括弧())、電話フィールド内の空白文字を削除します。キーワードトークナイザ を使用して、入力全体を単一のトークンとしてトークン化します。
次のクエリは、 page_updated_by.phoneフィールドで string 1234567890を検索します。
MongoDB Search 結果には、phonestring 内の数値がクエリ文字列と一致する 1 つのドキュメントが含まれます。 MongoDB Search は、クエリにドキュメントをクエリ文字列と一致させました。ただし、クエリに電話番号を囲む括弧と数字の間にあるハイフンが含まれていない場合でも、 MongoDB Search は mapping 文字フィルターを使用してこれらの文字を削除し、フィールド値。 具体的には、 MongoDB Search は、_id: 1 を使用してドキュメントの phoneフィールドに対して次のトークンを生成しました。
ドキュメント ID | 出力トークン |
|---|---|
|
|
MongoDB Search は、(123)-456-7890、123-456-7890、123.456.7890 などの検索でも、_id: 1 を持つドキュメントと一致します。 string フィールドにインデックスを付ける方法 では、 MongoDB Search はインデックス検索クエリー(または指定されている場合は searchAnalyzer を使用)。次の表は、ハイフン(-)、ドット(.)、開始括弧(()、閉じ括弧())、クエリ内の空白文字のインスタンスを削除してMongoDB Search が作成するトークンを示しています。ターム:
クエリ用語 | 出力トークン |
|---|---|
|
|
|
|
|
|
ペルシャ語
persian 文字フィルターは、ゼロ幅非結合のインスタンスをスペース文字に置き換えます。この文字フィルターは、 Lucene のPersianCharFilterに基づいています。
属性
persian 文字フィルターには次の属性があります。
名前 | タイプ | 必須 | 説明 |
|---|---|---|---|
| string | はい | この文字フィルター型を識別する、人間が判読できるラベル。 値は |
例
次のインデックス定義の例では、 persianCharacterIndexという名前のカスタムアナライザを使用して、分コレクションのtext.fa_IRフィールドにインデックスを作成します。 カスタムアナライザは、以下を指定します。
persian文字フィルターを適用して、フィールド値内の印刷以外の文字をスペース文字に置き換えます。ホワイトスペーストークナイザ を使用して、単語間の空白の発生に基づいてトークンを作成します。
次のクエリは、text.fa_IR フィールドで صحبت というタームを検索します。
MongoDB Search では、クエリタームを含む _id: 2ドキュメントが返されます。MongoDB Search は、まずゼロ幅非結合のインスタンスをスペースドキュメントに置き換え、次に単語間の空白の発生に基づいてフィールド値内の各単語の個別のトークンを作成することで、クエリタームをドキュメントと照合します。具体的には、 MongoDB Search は、_id: 2 を持つドキュメントに対して次のトークンを生成します。
ドキュメント ID | 出力トークン |
|---|---|
|
|
詳細
mapping 文字フィルターを使用する追加のインデックス定義とクエリを確認するには、次の参照ページの例をご覧ください。
単一トークンフィルター