AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

wildcard 演算子

wildcard

wildcard 演算子を使用すると、検索文字列に任意の文字と一致する特殊文字を使用するクエリが可能になります。

文字
説明

?

任意の 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

query

文字列または複数の文字列の配列

検索する文字列または複数の文字列。

はい

path

文字列または複数の文字列の配列

検索対象となるインデックス付きフィールド。ワイルドカード パスを指定して検索することもできます。

はい

allowAnalyzedField

ブール値

トークン化アナライザでインデックス付けされたフィールドに対してクエリを実行する場合は、true に設定します。これにより、フィールドのアナライザがインデックス付けされた値を多数の期間に分割するのを防ぎます。キーワードアナライザでインデックス付けされたフィールドでは、このオプションは必要ありません。

no

false

score

オブジェクト

一致する検索用語の結果に割り当てられたスコアを変更します。次の選択肢があります。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 指定された式を使用して結果スコアを置き換えます。

クエリで score を使用する方法については、「結果内のドキュメントのスコアリング」を参照してください。

no

wildcard はタームレベルの演算子であるため、query フィールドは分析されません。allowAnalyzedFieldtrue に設定することで、トークン化アナライザでインデックス付けされたフィールドに wildcard 演算子を使用します。Keyword アナライザ でインデックスされたフィールドでは、フィールド値が単一の期間として扱われるため、allowAnalyzedField: true は必要ありません。

wildcardallowAnalyzedField: true を併用すると、MongoDB Search は、そのフィールドに指定されたアナライザまたはカスタムアナライザに基づいて、文字フィルターとトークン フィルターを適用します。MongoDB Search はトークン化をスキップし、出力は常に単一のトークンとなります。

次の例では、分析対象フィールドで検索を実行する際の wildcard 演算子の挙動が示されています。

フィールドfoo bar baz標準アナライザでインデックス付けされてます。MongoDB Search はフィールドを分析し、foobarbaz としてインデックスを作成します。このフィールドで foo bar* を検索しても何も見つかりません。これは、ワイルドカード演算子が foo bar* を末尾にワイルドカードが付いた単一の検索タームとして扱うためです。つまり、 MongoDB Search はフィールドで foo bar で始まるタームを検索しますが、タームが存在しないため何も見つかりません。

キーワード アナライザーでインデックス付けされたフィールドで *Star Trek* を検索すると、任意のコンテキストでフィールドに文字列 Star Trek が含まれるすべてのドキュメントが見つかります。標準アナライザでフィールドにインデックス付けされた *Star Trek* を検索しても何も見つかりません。これは、 StarTrek の間にスペースがあり、インデックスにスペースが含まれていないためです。

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 フィールドの * 文字は任意の文字に一致し、\\? 文字列はリテラルの疑問符に一致します。