MongoDBでテキスト検索用のインデックスを作成する方法
MongoDBでは、createIndex()メソッドを使ってテキスト検索用のインデックス(text index)を作成できます。テキストインデックスを設定すると、$text演算子と$search演算子を組み合わせることで、コレクション内の文字列フィールドを高速かつ効率的に全文検索できるようになります。
1. ドキュメントを含むコレクションの作成
まず、サンプルとなるドキュメントを挿入してコレクションを作成します。
> db.demo331.insertOne({"Words":"This is a MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e521c35f8647eb59e562089")
}
> db.demo331.insertOne({"Words":"THIS is a MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e521c36f8647eb59e56208a")
}2. find()メソッドで全ドキュメントを表示
挿入したすべてのドキュメントは、find()メソッドで確認できます。
> db.demo331.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e521c35f8647eb59e562089"), "Words" : "This is a MySQL" }
{ "_id" : ObjectId("5e521c36f8647eb59e56208a"), "Words" : "THIS is a MongoDB" }3. テキスト検索用インデックスの作成
次に、Wordsフィールドに対してテキストインデックスを作成します。インデックスの種類として"text"を指定するのがポイントです。
> db.demo331.createIndex( {Words: "text" } );
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}出力結果から、インデックス数が1から2に増えていることがわかります。これでテキストインデックスの作成は完了です。
4. $textと$searchによる全文検索
インデックス作成後は、$text演算子と$search演算子を使ってキーワード検索が可能になります。
> db.demo331.find({$text:{$search:"MySQL"}});「MySQL」というキーワードを含むドキュメントのみが、以下のように返されます。
{ "_id" : ObjectId("5e521c35f8647eb59e562089"), "Words" : "This is a MySQL" }補足ポイント
- 1つのコレクションに対して作成できるテキストインデックスは1つだけです。
- 複数のフィールドをまとめて検索対象にしたい場合は、
db.collection.createIndex({ fieldA: "text", fieldB: "text" })のように複合テキストインデックスを作成します。 - 大文字・小文字は区別されず、「MySQL」で検索しても「mysql」を含むドキュメントもヒットします。
-
MySQLで区切り文字間のテキストを抽出する方法|LOCATE()とSUBSTR()の使い方
はじめにMySQLで区切り文字(デリミタ)の間にあるテキストを抽出したい場合は、LOCATE()関数とSUBSTR()関数を組み合わせることで実現できます。本記事では、区切り文字としてコロン(:)を使用した例を紹介しますが、カンマやハイフンなど、任意の文字に変更して利用することも可能です。基本構文以下の構文は、区切り文字の直後にある単語を検索・抽出するためのものです。SELECT SUBSTR(yourColumnName, LOCATE(:,yourColumnName)+1, (CHAR_LENGTH(yourColumnName) - LOCATE(:
-
JavaでMongoDBにインデックスを作成する方法をわかりやすく解説
MongoDBでインデックスを作成するには、createIndex() メソッドを使用します。この記事では、MongoDBシェルでの基本的な構文と、Javaドライバーを使ったインデックス作成の手順をサンプルコード付きで解説します。 MongoDBシェルでの基本構文 MongoDBシェル(mongosh)でインデックスを作成する場合、以下の構文を使用します。 db.COLLECTION_NAME.createIndex({KEY: 1}) KEY にはインデックスを作成したいフィールド名を指定し、1 は昇順(ascending)を意味します。降順(descending)のインデックスを作成したい