MongoDB-テキスト検索

バージョン2.4から、MongoDBは文字列コンテンツ内を検索するためのテキストインデックスのサポートを開始しました。ザ・Text Search ステミング技術を使用して、次のようなステミングストップワードをドロップすることにより、文字列フィールドで指定された単語を検索します a, an, the, など。現在、MongoDBは約15の言語をサポートしています。

テキスト検索の有効化

当初、テキスト検索は実験的な機能でしたが、バージョン2.6以降、構成はデフォルトで有効になっています。

テキストインデックスの作成

以下のドキュメントを検討してください posts 投稿テキストとそのタグを含むコレクション-

> db.posts.insert({
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": ["mongodb", "tutorialspoint"]
}
{
	"post_text" : "writing tutorials on mongodb",
	"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })

post_textフィールドにテキストインデックスを作成して、投稿のテキスト内を検索できるようにします-

>db.posts.createIndex({post_text:"text"})
{
	"createdCollectionAutomatically" : true,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

テキストインデックスの使用

post_textフィールドにテキストインデックスを作成したので、次の単語を含むすべての投稿を検索します tutorialspoint 彼らのテキストで。

> db.posts.find({$text:{$search:"tutorialspoint"}}).pretty()
{
	"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}

上記のコマンドは、次の単語を含む結果ドキュメントを返しました tutorialspoint 彼らの投稿テキストで-

{ 
   "_id" : ObjectId("53493d14d852429c10000002"), 
   "post_text" : "enjoy the mongodb articles on tutorialspoint", 
   "tags" : [ "mongodb", "tutorialspoint" ]
}

テキストインデックスの削除

既存のテキストインデックスを削除するには、最初に次のクエリを使用してインデックスの名前を見つけます-

>db.posts.getIndexes()
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "mydb.posts"
	},
	{
		"v" : 2,
		"key" : {
			"fts" : "text",
			"ftsx" : 1
		},
		"name" : "post_text_text",
		"ns" : "mydb.posts",
		"weights" : {
			"post_text" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]
>

上記のクエリからインデックスの名前を取得したら、次のコマンドを実行します。ここに、post_text_text インデックスの名前です。

>db.posts.dropIndex("post_text_text")
{ "nIndexesWas" : 2, "ok" : 1 }