MongoDBで全文検索を実行する方法
序章
完全一致を検索するか、大なり小なりの比較を使用するか、正規表現を使用してデータをフィルタリングするMongoDBクエリは、多くの状況で十分に機能します。 ただし、これらの方法は、豊富なテキストデータを含むフィールドに対するフィルタリングに関しては不十分です。
Web検索エンジンに「コーヒーレシピ」と入力したが、その正確なフレーズを含むページしか返さなかったとします。 この場合、コーヒーレシピを掲載している最も人気のあるウェブサイトには、「コーヒーレシピ」という正確なフレーズが含まれていない可能性があるため、探しているものが正確に見つからない可能性があります。 ただし、そのフレーズを実際の検索エンジンに入力すると、「素晴らしいコーヒードリンク(レシピ付き!)」や「自宅で作れるコーヒーショップのドリンクとおやつ」などのタイトルのページが見つかる場合があります。 これらの例では、「コーヒー」という単語が存在しますが、タイトルには「レシピ」という単語の別の形式が含まれているか、完全に除外されています。
テキストを検索クエリに一致させるこのレベルの柔軟性は、テキストデータの検索を専門とする全文検索エンジンでは一般的です。 このようなアプリケーションに特化したオープンソースツールは複数あり、ElasticSearchが特に人気があります。 ただし、専用の検索エンジンにある堅牢な検索機能を必要としないシナリオの場合、一部の汎用データベース管理システムは、独自の全文検索機能を提供します。
このチュートリアルでは、MongoDBでテキストインデックスを作成し、それを使用してデータベース内のドキュメントを一般的な全文検索クエリとフィルターに対して検索する方法を例を挙げて学習します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 通常のroot以外のユーザーがいるサーバー
sudo
特権と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のドキュメントに適用する方法を理解するには、フィルタリングできるドキュメントのコレクションが必要です。 このガイドでは、いくつかの異なる種類のコーヒー飲料の名前と説明を含むサンプルドキュメントのコレクションを使用します。 これらのドキュメントは、キューバのコーヒー飲料を説明する次のサンプルドキュメントと同じ形式になります。
{
"name": "Cafecito",
"description": "A sweet and rich Cuban hot coffee made by topping an espresso shot with a thick sugar cream foam."
}
このドキュメントには、次の2つのフィールドが含まれています。 name
コーヒードリンクとより長い description
これは、飲み物とその成分に関する背景情報を提供します。
次を実行します insertMany()
MongoDBシェルのメソッドを使用して、という名前のコレクションを作成します 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")
]
}
を実行すると、ドキュメントが正しく挿入されたことを確認できます。 find()
上のメソッド recipes
引数のないコレクション。 これにより、コレクション内のすべてのドキュメントが取得されます。
- 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" });
2つのフィールドのそれぞれについて、 name
と description
、インデックスタイプはに設定されます 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
検索クエリを値として取る演算子。 この例では、クエリは1つの単語です。 spiced
.
このコマンドを実行した後、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
インデックスで、そしてまたそれをステミングしました。 このため、言葉 spice
と spices
の中に Pumpkin Spice Late
これらの単語のいずれも具体的に検索しなかった場合でも、ドキュメントは検索クエリに正常に一致しました。
さて、あなたが特にエスプレッソドリンクが好きだとしましょう。 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
操作、単語という理由だけで2番目の結果を受け入れました cream
説明にが表示されます。
探していることをMongoDBに伝えるため ice cream
2つの別々の単語ではなく、完全なフレーズとして、次のクエリを使用します。
- db.recipes.find({ $text: { $search: "\"ice cream\"" } });
フレーズを囲む各二重引用符の前にある円記号に注意してください。 \"ice cream\"
. 実行している検索クエリは "ice cream"
、完全に一致する必要があるフレーズを示す二重引用符付き。 バックスラッシュ(\
)二重引用符をエスケープして、JSON構文の一部として扱われないようにします。これらはJSON構文内に表示される可能性があるためです。 $search
演算子の値。
今回、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 }
スコアがどれだけ高いかに注目してください Pumpkin Spice Latte
、両方の単語を含む唯一のコーヒー飲料 spiced
と espresso
. 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 }
The Pumpkin Spice Latte
ドキュメントは関連性スコアが最も高いため、最初の結果として表示されます。
関連性スコアに従って結果を並べ替えると便利です。 これは、複数の単語を含むクエリの場合に特に当てはまります。最も適切なドキュメントには通常複数の検索用語が含まれますが、関連性の低いドキュメントには1つしか含まれない場合があります。
結論
このチュートリアルに従うことで、MongoDBの全文検索機能を理解できました。 テキストインデックスを作成し、単一および複数の単語、完全なフレーズ、および除外を使用してテキスト検索クエリを作成しました。 また、返されたドキュメントの関連性スコアを評価し、検索結果を並べ替えて、最も関連性の高い結果を最初に表示しました。 MongoDBの全文検索機能は、一部の専用検索エンジンの機能ほど堅牢ではない場合がありますが、多くのユースケースに十分対応できます。
単一のテキストインデックス内には、大文字と小文字の区別や発音区別符号の感度、複数の言語のサポートなど、より多くの検索クエリ修飾子があることに注意してください。 これらは、テキスト検索アプリケーションをサポートするためのより堅牢なシナリオで使用できます。 MongoDBの全文検索機能とその使用方法の詳細については、公式の公式のMongoDBドキュメントを確認することをお勧めします。