定義
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 では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| 文字列または複数の文字列の配列 | 検索する string。文字列に複数の検索タームがある場合、 MongoDB Search は 文字列内の各タームの一致も個別に検索します | 必須 |
| 文字列または複数の文字列の配列 | 検索するインデックス付きフィールド(1 つまたは複数)。ワイルドカード パスを指定して検索することもできます。 | 必須 |
| ドキュメント | ファジー検索を有効にします。検索タームに類似する文字列を検索します。 | 任意 |
| integer | 指定した検索タームに一致するために必要な 1 文字の編集の最大数。値は | 任意 |
| integer | 結果内の各タームの先頭にあり、完全一致する必要がある文字数。デフォルト値は | 任意 |
| integer | 生成および検索するバリエーションの最大数。この制限はトークンごとに適用されます。デフォルト値は | 任意 |
| string | クエリ内の語句を照合するために使用する条件。省略された場合、デフォルトは
| オプション、推奨 |
| ドキュメント | 一致する検索語句の結果に割り当てられたスコア。スコアを変更するには、次のいずれかのオプションを使用します。
配列値をクエリする場合、配列内のクエリに一致する値が多いほど、 MongoDB Search はより高いスコアを割り当てます。 | 任意 |
| string | シノニム(同意語)を使用してクエリを実行するために必要です。 インデックス定義内のシノニム(同意語)マッピングの定義名。値は空の文字列にできません。 重要:
シノニム(同意語)マッピング を使用するクエリをMongoDB Search が実行するのにかかる時間は、 シノニム(同意語)ソースコレクション内のドキュメントの数とサイズによって異なります。ソースとなるシノニム ドキュメントの数が少ないほど、所要時間は短くなる可能性があります。 | 任意 |
スコアリングの動作
By default, the text operator uses the bm25 similarity algorithm to score documents depending on their relevance to the query.
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" |
|---|---|---|---|
|
|
|
|
|
|
|
|
シノニム(同意語)マッピング を使用するクエリをMongoDB Search が実行するのにかかる時間は、 シノニム(同意語)ソースコレクション内のドキュメントの数とサイズによって異なります。ソースとなるシノニム ドキュメントの数が少ないほど、所要時間は短くなる可能性があります。
例
The examples in this page use the movies collection in the sample_mflix database. After loading the sample dataset into your cluster, create the MongoDB Search index with dynamic mappings and run the example queries on your cluster. You must also define a synonyms mapping collection in the index as shown in the Index Definition Examples to try the synonyms examples below.
基本的な例
The following MongoDB Search query uses the text operator to search the title field in the movies collection for the term surfer. It includes a $project stage to:
すべてのフィールドを除外。例外:
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は、無効になっています。
The query also includes a $limit stage to limit the output to 10 results and a $project stage to:
すべてのフィールドを除外。例外:
title次のフィールドを追加:
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": {} } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
次のクエリは、文字列 naw yark 内の各タームの 1 文字以内にあるタームを title フィールドで検索します。このクエリは以下を使用します。
クエリをドキュメントに一致させるために、各タームに対して 1 文字だけの違いを許容することを示す
maxEditsフィールド。クエリをドキュメントに一致させるために、
nawの類似タームを最大 100 個まで、かつyarkの類似タームを最大 100 個まで考慮する必要があることを示すmaxExpansionsフィールド。
The query also includes a $limit stage to limit the output to 10 results and a $project stage to:
すべてのフィールドを除外。例外:
title次のフィールドを追加:
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
次のクエリは、文字列 naw yark 内の各タームの 1 文字以内にあるタームを title フィールドで検索します。このクエリは以下を使用します。
クエリをドキュメントに一致させるための文字の違いが 1 文字だけであることを示す
maxEditsフィールド。prefixLengthフィールドは、文字列naw yark内の各用語の最初の2文字が変更されないことを示し、クエリをドキュメントと一致させます。
The query also includes a $limit stage to limit the output to 8 results and a $project stage to:
_idとtitleを除くすべてのフィールドを除外次のフィールドを追加:
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": { "maxEdits": 1, "prefixLength": 2, } } } }, { $limit: 8 }, { $project: { "_id": 1, "title": 1, score: { $meta: "searchScore" } } } ])
一致 all
次のクエリでは、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 に基づき結果が返されます。このマッピング タイプは コレクションのインデックスのシノニム マッピング定義で指定されます。
equivalent マッピングを使用した any の一致
次のクエリは、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 の検索で類似ドキュメントが返されます。
explicit マッピングを使用した any の一致
次のクエリは、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 に対するクエリ結果は返されません。これらの単語は他の単語をシノニム(同意語)とみなすように構成されていないためです。
シノニムを使用した all の一致
次のクエリでは、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 シノニムとして設定しました。