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

text (MongoDB Search 演算子)

text 演算子は、 インデックス構成で指定したアナライザを使用して全文検索を実行します。アナライザを省略すると、text 演算子はデフォルトの標準アナライザを使用します。

text 演算子を使用して、単一期間の正確な一致を検索できます。

text の構文は次のとおりです。

{ $search: { "index": <index name>, // optional, defaults to "default" "text": { "query": "<search-string>", "path": "<field-to-search>", "fuzzy": <options>, "matchCriteria": "any" | "all" "score": <options>, "synonyms": "<synonyms-mapping-name>" } }}

text では、次の用語を使用してクエリを作成します。

フィールド
タイプ
説明
必要性

query

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

検索する string。文字列に複数の検索タームがある場合、 MongoDB Search は 文字列内の各タームの一致も個別に検索します

必須

path

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

検索するインデックス付きフィールド(1 つまたは複数)。ワイルドカード パスを指定して検索することもできます。

必須

fuzzy

ドキュメント

ファジー検索を有効にします。検索タームに類似する文字列を検索します。fuzzy は synonyms と併用できません。

任意

fuzzy.maxEdits

integer

指定した検索タームに一致するために必要な 1 文字の編集の最大数。値は 1 または 2 です。デフォルト値は 2 です。ダメラウ レーベンシュタイン距離 を使用します。

任意

fuzzy.prefixLength

integer

結果内の各タームの先頭にあり、完全一致する必要がある文字数。デフォルト値は 0 です。

任意

fuzzy.maxExpansions

integer

生成および検索するバリエーションの最大数。この制限はトークンごとに適用されます。デフォルト値は 50 です。

任意

matchCriteria

string

クエリ内の語句を照合するために使用する条件。省略された場合、デフォルトは any となります。値は次のいずれかになります。

  • any - query フィールドのいずれかの語句を含むドキュメントを返す。

  • all - query フィールドのすべての語句を含むドキュメントのみを返す。

オプション、推奨

score

ドキュメント

一致する検索語句の結果に割り当てられたスコア。スコアを変更するには、次のいずれかのオプションを使用します。

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

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

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

配列値をクエリする場合、配列内のクエリに一致する値が多いほど、 MongoDB Search はより高いスコアを割り当てます。

任意

synonyms

string

シノニム(同意語)を使用してクエリを実行するために必要です。

インデックス定義内のシノニム(同意語)マッピングの定義名。値は空の文字列にできません。fuzzy は synonyms と併用できません。

重要: synonymsオプションを使用するには、 プロパティをstring indexOptionspositionsまたはデフォルト値の に設定して、クエリフィールドをoffsets としてインデックス必要があります。詳細については、 「string フィールドのプロパティの構成」 を参照してください。

synonyms を使用する場合は、常に matchCriteria を使用してください。MongoDB Search は、matchCriteria なしで synonyms を使用する text クエリのみ、すべてのタームがクエリと完全に同じ位置にあるドキュメントを一致させます。この動作は将来変更され、クエリ結果も変更される可能性があります。

シノニム(同意語)マッピング を使用するクエリをMongoDB Search が実行するのにかかる時間は、 シノニム(同意語)ソースコレクション内のドキュメントの数とサイズによって異なります。ソースとなるシノニム ドキュメントの数が少ないほど、所要時間は短くなる可能性があります。

任意

デフォルトでは、text 演算子はbm25の類似性アルゴリズムを使用して、クエリとの関連性に応じてドキュメントにスコアを付けます。

MongoDB Search インデックス定義のstringフィールドのsimilarity.typeプロパティで別の類似性アルゴリズムを指定することにより、使用する類似性アルゴリズムを変更できます。string型の MongoDB Search インデックスを設定する方法については、「文字列フィールドのインデックス作成方法」を参照してください。

サポートされている類似性アルゴリズムの詳細については、 「スコアの詳細」を参照してください。

MongoDB Search は、matchCriteria なしで synonyms を使用する text クエリのみにクエリターム の完全一致を含むドキュメントのみと一致します(展開されたシノニムの有無にかかわらず)。

この動作は今後変更される可能性があり、クエリ結果も変わる可能性があります。サービスの中断を避けるため、synonyms を使用する場合は、常に matchCriteria を使用してください。または、phrase 演算子で同義語を使用してください。

たとえば、nyc と new york city の同等の同義語マッピングがあると仮定します。i like nyc の検索結果は次のとおりです。

演算子の仕様
デフォルトの動作
"matchCriteria": "any"
"matchCriteria": "all"

text 次のない: synonyms

i または like または nyc に一致します

i または like または nyc に一致します

i かつ like かつ nyc に一致します

text と共に synonyms

i like nyc または i like new york city に一致

i または like または(nyc または new york city)に一致します

i かつ like かつ(nyc または new york city )に一致します

シノニム(同意語)マッピング を使用するクエリをMongoDB Search が実行するのにかかる時間は、 シノニム(同意語)ソースコレクション内のドキュメントの数とサイズによって異なります。ソースとなるシノニム ドキュメントの数が少ないほど、所要時間は短くなる可能性があります。

このページの例では、sample_mflix データベース内の movies コレクションを使用します。サンプル データセット をクラスターにロードしたら、動的マッピングを使用して MongoDB Search インデックスを作成し、クラスターでサンプル クエリを実行します。また、以下のsynonyms シノニム の例を試すには、 インデックス定義の例 に示されているように、インデックス内に のマッピングコレクションを定義する必要があります。

次の MongoDB Search クエリは、text 演算子を使用して、movies コレクション内の title フィールドで surfer という語句を検索します。これには、次のための $project ステージが含まれます。

  • すべてのフィールドを除外。例外: title

  • 次のフィールドを追加: score

db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "surfer" } } }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } }])

次のクエリは、titleフィールドで summer というタームを検索します。これは、$searchMeta ステージを使用して、検索条件に一致する次のバケット(年)内の映画の数を検索します。

  • 1970 (このバケットの下限値を含む)

  • 1980: 1970 バケットの 排他的上限であり、このバケットの下限

  • 1990: 1980 バケットの 排他的上限であり、このバケットの下限

  • 2000: 1990 バケットの 排他的上限であり、このバケットの下限

  • 2010: 2000 バケットの 排他的上限であり、このバケットの下限

  • 2015: 2010 の排他的上限

db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "text": { "path": "title", "query": "summer" } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1970, 1980, 1990, 2000, 2010, 2020 ] } } } } }])

次のクエリは、text 演算子を使用して、moviesコレクション内の titleフィールドで、query フレーズ naw yark 内の各タームの 1 文字以内のバリエーションを検索します。MongoDB Search では、デフォルトのfuzzy オプションを使用するか、maxExpansions、prefixLength、または maxEdits フィールドを定義するかに応じて異なる結果が返されます。

次のタブをクリックすると、デフォルトおよび指定の各オプションを使用するサンプル クエリが表示されます。

次のクエリは、title フィールドでフレーズ naw yark を検索します。このクエリでは、次の fuzzy デフォルトオプションが使用されます。

  • maxEdits は、与えられたフレーズの各タームについて最大 2 文字までの違いを許容して、クエリをドキュメントに一致させることができます。

  • maxExpansions は、naw yark 内の各タームに対して最大 50 個の類似タームを考慮して一致を見つけます。

  • prefixLength は、無効になっています。

クエリには、出力を 10 の結果に制限する $limit ステージと、次の操作を行う $project ステージも含まれています。

  • すべてのフィールドを除外。例外: title

  • 次のフィールドを追加: score

db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": {} } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } }])

次のクエリでは、text 演算子を使用して movies コレクションの plot フィールドで、クエリ文字列 automobile race が含まれるすべての用語を検索します。

db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "automobile race", "matchCriteria": "all" } } }, { "$limit": 20 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } }])
[ { plot: 'A young driver, Speed Racer, aspires to be champion of the racing world with the help of his family and his high-tech Mach 5 automobile.', title: 'Speed Racer', score: 6.122188568115234 }, { plot: 'A gorgeous young automobile fanatic--and front to the hottest unsigned band on the West coast--finds herself caught up in illegal drag-racing competitions organized by exotic car fanatics.', title: 'Redline', score: 5.497724533081055 }, { plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.', title: 'The Great Race', score: 5.282209396362305 }]

MongoDB Search では、plotフィールドの 任意に 、automobile と race というタームを含むドキュメントが返されます。

次の例では、text 演算子を使用して、sample_mflix.movies名前空間内の plotフィールドを検索しています。MongoDB Search では、 シノニム(同意語)ソースコレクション内の synonymous_termsマッピング タイプsample_mflix.movies に基づき結果が返されます。このマッピング タイプは コレクションのインデックスのシノニム マッピング定義で指定されます。

次のクエリは、plot フィールドでフレーズ attire を検索します。クエリは、コレクションのインデックスにある mySynonyms という名前のシノニム(同意語)マッピングを使用して、dress という単語のシノニムとして設定されている単語も検索します。

db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "attire", "synonyms": "my_synonyms", "matchCriteria": "any" } } }, { "$limit": 5 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } }])

MongoDB Search では、attire、apparel、dress というタームを含むドキュメントが返されます。これらはすべてシノニム(同意語)ソースコレクション(synonymous_terms)でこれらすべてのタームを equivalent シノニムとして設定したためです。つまり、これらはすべてシノニムであることを平均それぞれの 。したがって、 MongoDB Search では、dress と attire の検索で類似ドキュメントが返されます。

次のクエリは、plot フィールドでフレーズ boat race を検索します。コレクションのインデックスにある my_synonyms というシノニムマッピングを使用して、boat と race という単語の同義語に設定されている単語も検索します。

db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "boat race", "synonyms": "my_synonyms", "matchCriteria": "any" } } }, { "$limit": 10 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } }])

MongoDB Search では、boat、vessel,、sail、または race、rally、contest というタームを含むドキュメントが返されます。これは、boat を explicit のシノニムとして、または vessel のシノニムとして設定したためです。と sail を、race を rally と contest の explicit シノニムとして設定しました。MongoDB Search では、vessel と sail、または rally と contest に対するクエリ結果は返されません。これらの単語は他の単語をシノニム(同意語)とみなすように構成されていないためです。

次のクエリでは、text 演算子を使用して、movies コレクションの plot フィールドでクエリ文字列 automobile race 内のすべての用語を検索します。

MongoDB Search では、 シノニム(同意語)ソースコレクション内の synonymous_termsマッピング タイプsample_mflix.movies に基づき結果が返されます。このマッピング タイプは コレクションのインデックスのシノニム マッピング定義で指定されます。

db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "automobile race", "matchCriteria": "all", "synonyms": "my_synonyms" } } }, { "$limit": 20 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } }])

MongoDB Search では、クエリ用語 automobile、car、または vehicle と race、context、または rally を含むドキュメントが返されます。これは、automobile、vehicle、car を に構成したためです。が equivalent のシノニムとみなされるようにし、synonymous_termsコレクションにおいて、rally と contest を race の explicit シノニムとして設定しました。