定義
wildcardwildcard演算子を使用すると、検索文字列に任意の文字と一致する特殊文字を使用するクエリが可能になります。文字説明?任意の 1 文字と一致します。
*0 文字以上の文字と一致します。
\エスケープ文字。
wildcardはタームレベルの演算子であるため、queryフィールドは分析されません。queryフィールドは特殊文字を含む 1 つの期間として扱われるため、期間レベルの演算子は キーワード アナライザと効果的に連携します。分析済みのqueryフィールドに対するクエリの例については、「分析済みフィールドの例」を参照してください。
構文
wildcard の構文は次のとおりです。
{ $search: { "index": <index name>, // optional, defaults to "default" "wildcard": { "query": "<search-string>", "path": "<field-to-search>", "allowAnalyzedField": <boolean>, "score": <options> } } }
オプション
wildcard では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必要性 | default |
|---|---|---|---|---|
| 文字列または複数の文字列の配列 | 検索する文字列または複数の文字列。 | はい | |
| 文字列または複数の文字列の配列 | 検索対象となるインデックス付きフィールド。ワイルドカード パスを指定して検索することもできます。 | はい | |
| ブール値 | トークン化アナライザでインデックス付けされたフィールドに対してクエリを実行する場合は、 | no |
|
| オブジェクト | 一致する検索用語の結果に割り当てられたスコアを変更します。次の選択肢があります。
クエリで | no |
動作
wildcard はタームレベルの演算子であるため、query フィールドは分析されません。allowAnalyzedField を true に設定することで、トークン化アナライザでインデックス付けされたフィールドに wildcard 演算子を使用します。Keyword アナライザ でインデックスされたフィールドでは、フィールド値が単一の期間として扱われるため、allowAnalyzedField: true は必要ありません。
wildcard と allowAnalyzedField: true を併用すると、MongoDB Search は、そのフィールドに指定されたアナライザまたはカスタムアナライザに基づいて、文字フィルターとトークン フィルターを適用します。MongoDB Search はトークン化をスキップし、出力は常に単一のトークンとなります。
次の例では、分析対象フィールドで検索を実行する際の wildcard 演算子の挙動が示されています。
例
標準アナライザ
フィールドfoo bar baz は 標準アナライザでインデックス付けされてます。MongoDB Search はフィールドを分析し、foo、bar、baz としてインデックスを作成します。このフィールドで foo bar* を検索しても何も見つかりません。これは、ワイルドカード演算子が foo bar* を末尾にワイルドカードが付いた単一の検索タームとして扱うためです。つまり、 MongoDB Search はフィールドで foo bar で始まるタームを検索しますが、タームが存在しないため何も見つかりません。
例
キーワードアナライザ
キーワード アナライザーでインデックス付けされたフィールドで *Star Trek* を検索すると、任意のコンテキストでフィールドに文字列 Star Trek が含まれるすべてのドキュメントが見つかります。標準アナライザでフィールドにインデックス付けされた *Star Trek* を検索しても何も見つかりません。これは、 Star とTrek の間にスペースがあり、インデックスにスペースが含まれていないためです。
エスケープ文字の動作
mongoshまたはドライバーとともにエスケープ文字を使用する場合は、エスケープ文字の前にdoubleバックスラッシュを使用する必要があります。
例
リテラル アスタリスクを含む任意の文字列を検索するワイルドカード式を作成するには、次の式を使用します。
"*\\**"
最初と最後のアスタリスクは任意の文字に一致するワイルドカードとして機能し、\\* はリテラルのアスタリスクに一致します。
注意
次の式を使用して、リテラルのバックスラッシュをエスケープします。
"*\\\*"
例
次の例では、キーワード アナライザを使用するカスタム インデックス定義を持つ sample_mflix データベースの movies コレクションを使用します。クラスターに サンプル データセット がある場合は、movies コレクションに MongoDB Search インデックスを作成し、クラスターでサンプル クエリを実行できます。
インデックスの例
次のインデックス定義は、キーワード アナライザを使用して、movies コレクションの title フィールドにインデックスを作成します。
1 { 2 "mappings": { 3 "fields": { 4 "title": { 5 "analyzer": "lucene.keyword", 6 "type": "string" 7 } 8 } 9 } 10 }
クエリ例
次の例では、Green D で始まり、その後に任意の数の他の文字が続く映画のタイトルをすべての title フィールドで検索します。
次の例では、文字列 Wom?n (? は任意の 1 文字)で始まり、その後にスペースが続き、任意の数の追加文字が続く映画のタイトルを、すべての title フィールドで検索します。
次の例では、エスケープ文字を使用して、title フィールドが疑問符で終わるドキュメントを検索します。
query フィールドの * 文字は任意の文字に一致し、\\? 文字列はリテラルの疑問符に一致します。