MongoDBでテキスト検索を実装する方法をわかりやすく解説
MongoDBでコレクション内の文字列データを効率よく検索したい場合、$text 演算子と $search 演算子を組み合わせて使用します。テキスト検索を利用するには、事前に対象のフィールドに「テキストインデックス」を作成しておく必要があります。
この記事では、サンプルコレクションを使いながら、インデックスの作成からドキュメントの挿入、実際のテキスト検索までの手順を順番に解説していきます。
1. テキストインデックスを作成する
まず、createIndex() メソッドを使って、検索対象とするフィールド(ここでは StudentName)にテキストインデックスを作成します。
> db.demo156.createIndex({"StudentName":"text"});
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}この時点でコレクションが存在しなかったため、「createdCollectionAutomatically: true」と表示され、コレクションが自動的に作成されています。
2. サンプルドキュメントを挿入する
次に、insertOne() メソッドを使ってテスト用のドキュメントを3件登録します。
> db.demo156.insertOne({"StudentName":"Chris Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3547e8fdf09dd6d08539e6")
}
> db.demo156.insertOne({"StudentName":"John Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3547f2fdf09dd6d08539e7")
}
> db.demo156.insertOne({"StudentName":"John Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3547f7fdf09dd6d08539e8")
}3. 登録したドキュメントを確認する
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo156.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e3547e8fdf09dd6d08539e6"), "StudentName" : "Chris Brown" }
{ "_id" : ObjectId("5e3547f2fdf09dd6d08539e7"), "StudentName" : "John Doe" }
{ "_id" : ObjectId("5e3547f7fdf09dd6d08539e8"), "StudentName" : "John Smith" }4. $text と $search でテキスト検索を実行する
それでは、MongoDBでテキスト検索を実行してみましょう。検索条件として $text の中に $search を指定し、検索したいキーワードを渡します。
> db.demo156.find({ $text: { $search: "John" } } )実行結果は次のとおりです。「John」という語を含むドキュメントだけが抽出されています。
{ "_id" : ObjectId("5e3547f7fdf09dd6d08539e8"), "StudentName" : "John Smith" }
{ "_id" : ObjectId("5e3547f2fdf09dd6d08539e7"), "StudentName" : "John Doe" }補足:テキスト検索を活用するためのポイント
- テキストインデックスは1つのコレクションにつき1つだけ作成できます。複数フィールドを検索対象にしたい場合は、1つのインデックスに複数のフィールドを含めることが可能です。
- $search に複数のキーワードをスペース区切りで指定すると、いずれかのキーワードを含むドキュメントがヒットします(OR検索)。
- 完全一致のフレーズで検索したい場合は、$search の値をダブルクォートで囲んで指定します。
このように、$text と $search を使えば、MongoDBでも手軽に全文検索のようなテキスト検索を実現できます。大量の文字列データを扱うアプリケーションでは、ぜひ活用してみてください。
-
MongoDBで全文検索を実行する方法 – $text演算子の使い方
MongoDBで全文検索(フルテキスト検索)を実行するには、$text 演算子を使用します。$text は、テキストインデックスが設定されたフィールドの内容に対してテキスト検索を行うための機能です。本記事では、実際のコマンド例とともに、インデックス作成から検索実行までの手順を解説します。 1. テキストインデックスの作成 まず、createIndex() メソッドを使って、検索対象となるフィールドにテキストインデックスを作成します。以下の例では、demo654 コレクションの Name フィールドに対してテキストインデックスを設定しています。 > db.demo654.createI
-
MongoDBで配列の一致を検索するには?$all演算子の使い方を解説
MongoDBで配列フィールドに対して複数の要素がすべて含まれているかどうかを確認したい場合、$all 演算子を使用します。$all演算子は、指定したすべての要素を配列に含むドキュメントだけを選択するためのクエリ演算子です。この記事では、実際のコレクションを作成しながら、$all演算子を使った配列一致検索の手順を具体的に見ていきましょう。サンプルコレクションの作成とインデックス設定まず、ドキュメントを格納するコレクションを作成し、「ListOfSubject」フィールドにインデックスを設定します。> db.demo668.createIndex({ListOfSubject:1}); {