MongoDBで全文検索を実行する方法
著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
完全一致を検索するか、大なり小なりの比較を使用するか、正規表現を使用してデータをフィルタリングするMongoDBクエリは、多くの状況で十分に機能します。 ただし、これらの方法は、豊富なテキストデータを含むフィールドに対するフィルタリングに関しては不十分です。
Web検索エンジンに「コーヒーレシピ」と入力したが、その正確なフレーズを含むページしか返さなかったとします。 この場合、コーヒーレシピを掲載している最も人気のあるウェブサイトには、「コーヒーレシピ」という正確なフレーズが含まれていない可能性があるため、探しているものが正確に見つからない可能性があります。 ただし、そのフレーズを実際の検索エンジンに入力すると、「素晴らしいコーヒードリンク(レシピ付き!)」や「自宅で作れるコーヒーショップのドリンクとおやつ」などのタイトルのページが見つかる場合があります。 これらの例では、「コーヒー」という単語が存在しますが、タイトルには「レシピ」という単語の別の形式が含まれているか、完全に除外されています。
テキストを検索クエリに一致させるこのレベルの柔軟性は、テキストデータの検索を専門とする全文検索エンジンでは一般的です。 このようなアプリケーションに特化したオープンソースツールは複数あり、ElasticSearchが特に人気があります。 ただし、専用の検索エンジンにある堅牢な検索機能を必要としないシナリオの場合、一部の汎用データベース管理システムは、独自の全文検索機能を提供します。
このチュートリアルでは、MongoDBでテキストインデックスを作成し、それを使用してデータベース内のドキュメントを一般的な全文検索クエリとフィルターに対して検索する方法を例を挙げて学習します。
前提条件
このチュートリアルに従うには、次のものが必要です。
sudo
権限を持つ通常の非rootユーザーと、UFWで構成されたファイアウォールを備えたサーバー。 このチュートリアルは、Ubuntu 20.04を実行しているサーバーを使用して検証されており、Ubuntu20.04のこの初期サーバーセットアップチュートリアルに従ってサーバーを準備できます。- サーバーにインストールされているMongoDB。 これを設定するには、 Ubuntu20.04にMongoDBをインストールする方法に関するチュートリアルに従ってください。
- 認証を有効にして管理ユーザーを作成することにより、サーバーのMongoDBインスタンスを保護します。 このようにMongoDBを保護するには、 Ubuntu20.04でMongoDBを保護する方法に関するチュートリアルに従ってください。
- MongoDBコレクションのクエリと結果のフィルタリングに精通していること。 MongoDBクエリの使用方法については、MongoDBでクエリを作成する方法に関するガイドに従ってください。
注:サーバーの構成方法、MongoDBのインストール方法、およびMongoDBのインストールを保護する方法に関するリンクされたチュートリアルは、Ubuntu20.04を参照しています。 このチュートリアルは、基盤となるオペレーティングシステムではなく、MongoDB自体に焦点を当てています。 通常、認証が有効になっている限り、オペレーティングシステムに関係なく、すべてのMongoDBインストールで機能します。
ステップ1—テストデータの準備
MongoDBでフルテキスト検索を実行する方法を学習するために、この手順では、MongoDBシェルを開いてローカルにインストールされたMongoDBインスタンスに接続する方法の概要を説明します。 また、サンプルコレクションを作成し、それにいくつかのサンプルドキュメントを挿入する方法についても説明します。 このサンプルデータは、MongoDBを使用してテキストデータを検索する方法を説明するために、このガイド全体のコマンドと例で使用されます。
このサンプルコレクションを作成するには、管理ユーザーとしてMongoDBシェルに接続します。 このチュートリアルは、前提条件 MongoDBセキュリティチュートリアルの規則に従い、この管理ユーザーの名前が AdminSammy であり、その認証データベースがadmin
であることを前提としています。 異なる場合は、次のコマンドでこれらの詳細を変更して、独自の設定を反映させてください。
mongo -u AdminSammy -p --authenticationDatabase admin
インストール中に設定したパスワードを入力して、シェルにアクセスします。 パスワードを入力すると、プロンプトが大なり記号に変わります。
注:新しい接続では、MongoDBシェルはデフォルトでtest
データベースに接続します。 このデータベースを安全に使用して、MongoDBとMongoDBシェルを試すことができます。
または、別のデータベースに切り替えて、このチュートリアルに記載されているすべてのサンプルコマンドを実行することもできます。 別のデータベースに切り替えるには、use
コマンドに続けて、データベースの名前を実行します。
use database_name
全文検索をMongoDBのドキュメントに適用する方法を理解するには、フィルタリングできるドキュメントのコレクションが必要です。 このガイドでは、いくつかの異なる種類のコーヒー飲料の名前と説明を含むサンプルドキュメントのコレクションを使用します。 これらのドキュメントは、キューバのコーヒー飲料を説明する次のサンプルドキュメントと同じ形式になります。
Cafecitoドキュメントの例
{ "name": "Cafecito", "description": "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." }
このドキュメントには、コーヒー飲料のname
と、飲料とその成分に関する背景情報を提供する長いdescription
の2つのフィールドが含まれています。
MongoDBシェルで次のinsertMany()
メソッドを実行して、recipes
という名前のコレクションを作成し、同時に5つのサンプルドキュメントを挿入します。
db.recipes.insertMany([ {"name": "Cafecito", "description": "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam."}, {"name": "New Orleans Coffee", "description": "Cafe Noir from New Orleans is a spiced, nutty coffee made with chicory."}, {"name": "Affogato", "description": "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream."}, {"name": "Maple Latte", "description": "A wintertime classic made with espresso and steamed milk and sweetened with some maple syrup."}, {"name": "Pumpkin Spice Latte", "description": "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree."} ])
このメソッドは、新しく挿入されたオブジェクトに割り当てられたオブジェクト識別子のリストを返します。
Output{ "acknowledged" : true, "insertedIds" : [ ObjectId("61895d2787f246b334ece911"), ObjectId("61895d2787f246b334ece912"), ObjectId("61895d2787f246b334ece913"), ObjectId("61895d2787f246b334ece914"), ObjectId("61895d2787f246b334ece915") ] }
recipes
コレクションで引数なしでfind()
メソッドを実行すると、ドキュメントが正しく挿入されたことを確認できます。 これにより、コレクション内のすべてのドキュメントが取得されます。
db.recipes.find()
Output{ "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." } . . .
サンプルデータが揃ったら、MongoDBの全文検索機能の使用方法を学ぶ準備が整いました。
ステップ2—テキストインデックスを作成する
MongoDBの全文検索機能の使用を開始するには、コレクションにテキストインデックスを作成する必要があります。 インデックスは、ドキュメント自体とは別に、コレクション内の各ドキュメントからのデータの小さなサブセットのみを格納する特別なデータ構造です。 ユーザーがMongoDBで作成できるインデックスには、いくつかのタイプがあります。これらはすべて、データベースがコレクションをクエリするときに検索パフォーマンスを最適化するのに役立ちます。
ただし、テキストインデックスは、テキストデータを含むフィールドの検索をさらに容易にするために使用される特殊なタイプのインデックスです。 ユーザーがテキストインデックスを作成すると、MongoDBは言語固有のストップワードを検索から自動的に削除します。 これは、MongoDBが特定の言語で最も一般的な単語(英語では、「a」、「an」、「the」、「this」などの単語)を無視することを意味します。
MongoDBは、検索でSupplements-stemmingの形式も実装します。 これには、MongoDBが検索語のルート部分を識別し、そのルートの他の文法形式(「-ing」、「-ed」、または「-er」などの一般的な接尾辞を追加して作成)をのルートと同等に扱うことが含まれます。検索の目的。
これらの機能やその他の機能のおかげで、MongoDBは自然言語で記述されたクエリをより柔軟にサポートし、より良い結果を提供できます。
注:このチュートリアルは英語のテキストに焦点を当てていますが、MongoDBは、全文検索とテキストインデックスを使用する場合に複数の言語をサポートします。 MongoDBがサポートする言語の詳細については、サポートされている言語に関する公式ドキュメントを参照してください。
特定のMongoDBコレクションに対して作成できるテキストインデックスは1つだけですが、インデックスは複数のフィールドを使用して作成できます。 このサンプルコレクションでは、各ドキュメントのname
フィールドとdescription
フィールドの両方に役立つテキストが保存されています。 両方のフィールドのテキストインデックスを作成すると便利な場合があります。
次のcreateIndex()
メソッドを実行します。これにより、2つのフィールドのテキストインデックスが作成されます。
db.recipes.createIndex({ "name": "text", "description": "text" });
name
とdescription
の2つのフィールドのそれぞれについて、インデックスタイプはtext
に設定され、これらに基づいて全文検索用に調整されたテキストインデックスを作成するようにMongoDBに指示します。田畑。 出力は、インデックスの作成を確認します。
Output{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
インデックスを作成したので、それを使用してデータベースに全文検索クエリを発行できます。 次のステップでは、単一の単語と複数の単語の両方を含むクエリを実行する方法を学習します。
ステップ3—1つ以上の個別の単語を検索する
おそらく最も一般的な検索の問題は、1つ以上の個別の単語を含むドキュメントを検索することです。
通常、ユーザーは、検索エンジンが特定の検索用語を表示する場所を柔軟に決定できることを期待しています。 たとえば、人気のあるWeb検索エンジンを使用して「coffeesweet spicy」と入力した場合、これらの3つの単語が正確な順序で含まれる結果は期待できない可能性があります。 「コーヒー」、「甘い」、「スパイシー」という単語を含むWebページのリストを期待する可能性が高くなりますが、必ずしもすぐ近くにあるとは限りません。
これは、テキストインデックスを使用するときにMongoDBが一般的な検索クエリにアプローチする方法でもあります。 このステップでは、MongoDBが検索クエリを解釈する方法の概要をいくつかの例で示します。
まず、レシピにスパイスが含まれているコーヒードリンクを検索するとします。そのため、次のコマンドを使用して、spiced
という単語だけを検索します。
db.recipes.find({ $text: { $search: "spiced" } });
全文検索を使用する場合の構文は、通常のクエリとは少し異なることに注意してください。 name
やdescription
などの個々のフィールド名は、フィルタードキュメントには表示されません。 代わりに、クエリは$text
演算子を使用して、このクエリが以前に作成したテキストインデックスを使用することを意図していることをMongoDBに通知します。 覚えているかもしれませんが、コレクションには単一のテキストインデックスしかない場合があるため、これ以上具体的にする必要はありません。 このフィルターの埋め込みドキュメント内には、検索クエリを値として使用する$search
演算子があります。 この例では、クエリはspiced
という1つの単語です。
このコマンドを実行した後、MongoDBは次のドキュメントのリストを生成します。
Output{ "_id" : ObjectId("61895d2787f246b334ece915"), "name" : "Pumpkin Spice Latte", "description" : "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree." } { "_id" : ObjectId("61895d2787f246b334ece912"), "name" : "New Orleans Coffee", "description" : "Cafe Noir from New Orleans is a spiced, nutty coffee made with chicory." }
結果セットには2つのドキュメントがあり、どちらにも検索クエリに似た単語が含まれています。 New Orleans Coffee
ドキュメントには説明にspiced
という単語が含まれていますが、Pumpkin Spice Late
ドキュメントには含まれていません。
とにかく、MongoDBでステミングを使用したおかげで、このクエリによって返されました。 MongoDBは、spiced
という単語をspice
だけに削除し、インデックスでspice
を検索し、それをステミングしました。 このため、Pumpkin Spice Late
ドキュメントのspice
およびspices
は、どちらの単語も具体的に検索しなかった場合でも、検索クエリに正常に一致しました。
さて、あなたが特にエスプレッソドリンクが好きだとしましょう。 2語のクエリspiced espresso
を使用してドキュメントを検索し、スパイシーなエスプレッソベースのコーヒーを探してみてください。
db.recipes.find({ $text: { $search: "spiced espresso" } });
今回の結果のリストは以前より長くなっています。
Output{ "_id" : ObjectId("61895d2787f246b334ece914"), "name" : "Maple Latte", "description" : "A wintertime classic made with espresso and steamed milk and sweetened with some maple syrup." } { "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream." } { "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." } { "_id" : ObjectId("61895d2787f246b334ece915"), "name" : "Pumpkin Spice Latte", "description" : "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree." } { "_id" : ObjectId("61895d2787f246b334ece912"), "name" : "New Orleans Coffee", "description" : "Cafe Noir from New Orleans is a spiced, nutty coffee made with chicory." }
検索クエリで複数の単語を使用する場合、MongoDBは論理的なOR
操作を実行するため、ドキュメントは結果セットに含まれる式の一部と一致するだけで済みます。 結果には、spiced
とespresso
の両方、またはいずれかの用語のみを含むドキュメントが含まれます。 単語がドキュメントのどこかに表示されている限り、単語が必ずしも互いに近くに表示される必要はないことに注意してください。
注:テキストインデックスが定義されていないコレクションで全文検索クエリを実行しようとすると、MongoDBは代わりにエラーメッセージを返します。
Error messageError: error: { "ok" : 0, "errmsg" : "text index required for $text query", "code" : 27, "codeName" : "IndexNotFound" }
このステップでは、1つまたは複数の単語をテキスト検索クエリとして使用する方法、MongoDBが論理OR
操作で複数の単語を結合する方法、およびMongoDBがステミングを実行する方法を学習しました。 次に、テキスト検索クエリで完全なフレーズを使用し、除外の使用を開始して検索結果をさらに絞り込みます。
ステップ4—完全なフレーズの検索と除外の使用
個々の単語を検索すると、返される結果が多すぎたり、結果が十分に正確でない場合があります。 このステップでは、フレーズ検索と除外を使用して、検索結果をより正確に制御します。
あなたが甘い歯を持っていて、外は暑くて、アイスクリームをトッピングしたコーヒーはいいおやつのように聞こえるとしましょう。 前に概説した基本的な検索クエリを使用して、アイスクリームコーヒーを見つけてみてください。
db.recipes.find({ $text: { $search: "ice cream" } });
データベースは2つのコーヒーレシピを返します。
Output{ "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream." } { "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." }
Affogato
ドキュメントはあなたの期待に一致しますが、Cafecito
はアイスクリームで作られていません。 検索エンジンは、論理的なOR
操作を使用して、説明にcream
という単語が含まれているという理由だけで、2番目の結果を受け入れました。
ice cream
を2つの別々の単語ではなく完全なフレーズとして探していることをMongoDBに伝えるには、次のクエリを使用します。
db.recipes.find({ $text: { $search: "\"ice cream\"" } });
\"ice cream\"
というフレーズを囲む各二重引用符の前にある円記号に注意してください。 実行している検索クエリは"ice cream"
で、二重引用符は完全に一致する必要があるフレーズを示します。 バックスラッシュ(\
)は二重引用符をエスケープし、$search
演算子値内に表示される可能性があるため、JSON構文の一部として扱われません。
今回、MongoDBは単一の結果を返します。
Output{ "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream." }
このドキュメントは検索語と完全に一致し、cream
もice
も一致としてカウントするのに十分ではありません。
もう1つの便利な全文検索機能は、除外修飾子です。 これがどのように機能するかを説明するために、最初に次のクエリを実行して、エスプレッソに基づいてコレクション内のすべてのコーヒー飲料のリストを取得します。
db.recipes.find({ $text: { $search: "espresso" } });
このクエリは4つのドキュメントを返します。
Output{ "_id" : ObjectId("61895d2787f246b334ece914"), "name" : "Maple Latte", "description" : "A wintertime classic made with espresso and steamed milk and sweetened with some maple syrup." } { "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream." } { "_id" : ObjectId("61895d2787f246b334ece915"), "name" : "Pumpkin Spice Latte", "description" : "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree." } { "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." }
これらの飲み物のうち2つはミルクと一緒に提供されますが、ミルクを含まない飲み物が必要だとします。 これは、除外が役立つ場合があります。 1つのクエリで、結果に表示する単語と除外する単語を結合するには、除外する単語またはフレーズの前にマイナス記号(-
)を付けます。
例として、次のクエリを実行して、ミルクを含まないエスプレッソコーヒーを検索するとします。
db.recipes.find({ $text: { $search: "espresso -milk" } });
このクエリでは、2つのドキュメントが以前に返された結果から除外されます。
Output{ "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream." } { "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." }
完全なフレーズを除外することもできます。 アイスクリームなしのコーヒーを検索するには、検索クエリに-"ice cream"
を含めることができます。 繰り返しますが、次のように、円記号で二重引用符をエスケープする必要があります。
db.recipes.find({ $text: { $search: "espresso -\"ice cream\"" } });
Output{ "_id" : ObjectId("61d48c31a285f8250c8dd5e6"), "name" : "Maple Latte", "description" : "A wintertime classic made with espresso and steamed milk and sweetened with some maple syrup." } { "_id" : ObjectId("61d48c31a285f8250c8dd5e7"), "name" : "Pumpkin Spice Latte", "description" : "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree." } { "_id" : ObjectId("61d48c31a285f8250c8dd5e3"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam." }
複数の単語で構成されるフレーズに基づいてドキュメントをフィルタリングする方法と、特定の単語やフレーズを検索結果から除外する方法を学習したので、MongoDBの全文検索スコアを理解できます。
ステップ5—結果のスコアリングとスコアによる並べ替え
クエリ、特に複雑なクエリが複数の結果を返す場合、一部のドキュメントは他のドキュメントよりも一致する可能性があります。 たとえば、spiced espresso
の飲み物を探す場合、スパイスを使用していない、またはエスプレッソをベースとして使用していない飲み物よりも、スパイスとエスプレッソベースの両方の飲み物の方が適しています。
全文検索エンジンは通常、検索結果に関連性スコアを割り当て、検索クエリとの一致度を示します。 MongoDBもこれを行いますが、検索の関連性はデフォルトでは表示されません。
もう一度spiced espresso
を検索しますが、今回はMongoDBが各結果の検索関連性スコアも返すようにします。 これを行うには、クエリフィルタードキュメントの後にプロジェクションを追加します。
db.recipes.find( { $text: { $search: "spiced espresso" } }, { score: { $meta: "textScore" } } )
プロジェクション{ score: { $meta: "textScore" } }
は、$meta
演算子を使用します。これは、返されたドキュメントから特定のメタデータを返す特殊な種類のプロジェクションです。 この例では、ドキュメントのtextScore
メタデータを返します。これは、検索関連性スコアを含むMongoDBの全文検索エンジンの組み込み機能です。
クエリの実行後、返されるドキュメントには、フィルタードキュメントで指定されているように、score
という名前の新しいフィールドが含まれます。
Output{ "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream.", "score" : 0.5454545454545454 } { "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam.", "score" : 0.5384615384615384 } { "_id" : ObjectId("61895d2787f246b334ece914"), "name" : "Maple Latte", "description" : "A wintertime classic made with espresso and steamed milk and sweetened with some maple syrup.", "score" : 0.55 } { "_id" : ObjectId("61895d2787f246b334ece912"), "name" : "New Orleans Coffee", "description" : "Cafe Noir from New Orleans is a spiced, nutty coffee made with chicory.", "score" : 0.5454545454545454 } { "_id" : ObjectId("61895d2787f246b334ece915"), "name" : "Pumpkin Spice Latte", "description" : "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree.", "score" : 2.0705128205128203 }
spiced
とespresso
の両方の単語を含む唯一のコーヒー飲料であるPumpkin Spice Latte
のスコアがどれほど高いかに注目してください。 MongoDBの関連性スコアによると、それはそのクエリに最も関連性の高いドキュメントです。 ただし、デフォルトでは、結果は関連性の高い順に返されません。
これを変更するには、次のようにsort()
句をクエリに追加します。
db.recipes.find( { $text: { $search: "spiced espresso" } }, { score: { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } );
ソートドキュメントの構文は、プロジェクションの構文と同じです。 現在、ドキュメントのリストは同じですが、順序が異なります。
Output{ "_id" : ObjectId("61895d2787f246b334ece915"), "name" : "Pumpkin Spice Latte", "description" : "It wouldn't be autumn without pumpkin spice lattes made with espresso, steamed milk, cinnamon spices, and pumpkin puree.", "score" : 2.0705128205128203 } { "_id" : ObjectId("61895d2787f246b334ece914"), "name" : "Maple Latte", "description" : "A wintertime classic made with espresso and steamed milk and sweetened with some maple syrup.", "score" : 0.55 } { "_id" : ObjectId("61895d2787f246b334ece913"), "name" : "Affogato", "description" : "An Italian sweet dessert coffee made with fresh-brewed espresso and vanilla ice cream.", "score" : 0.5454545454545454 } { "_id" : ObjectId("61895d2787f246b334ece912"), "name" : "New Orleans Coffee", "description" : "Cafe Noir from New Orleans is a spiced, nutty coffee made with chicory.", "score" : 0.5454545454545454 } { "_id" : ObjectId("61895d2787f246b334ece911"), "name" : "Cafecito", "description" : "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam.", "score" : 0.5384615384615384 }
Pumpkin Spice Latte
ドキュメントは、関連性スコアが最も高いため、最初の結果として表示されます。
関連性スコアに従って結果を並べ替えると便利です。 これは、複数の単語を含むクエリの場合に特に当てはまります。最も適切なドキュメントには通常複数の検索用語が含まれますが、関連性の低いドキュメントには1つしか含まれない場合があります。
結論
このチュートリアルに従うことで、MongoDBの全文検索機能を理解できました。 テキストインデックスを作成し、単一および複数の単語、完全なフレーズ、および除外を使用してテキスト検索クエリを作成しました。 また、返されたドキュメントの関連性スコアを評価し、検索結果を並べ替えて、最も関連性の高い結果を最初に表示しました。 MongoDBの全文検索機能は、一部の専用検索エンジンの機能ほど堅牢ではない場合がありますが、多くのユースケースに十分対応できます。
単一のテキストインデックス内には、大文字と小文字の区別や発音区別符号の感度、複数の言語のサポートなど、より多くの検索クエリ修飾子があることに注意してください。 これらは、テキスト検索アプリケーションをサポートするためのより堅牢なシナリオで使用できます。 MongoDBの全文検索機能とその使用方法の詳細については、公式の公式のMongoDBドキュメントを確認することをお勧めします。