English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDBのテキスト検索

から2.4バージョンが開始すると、MongoDBはテキストインデックスをサポートし、指定された語を検索するために、ストリングフィールドでストック分析技術を使用して、ストック分析停止語(例えばa、an、Theなど)を削除して検索します。現在、MongoDBは約15言語で利用可能です。

テキスト検索を有効にする

最初は「Text Search(テキスト検索)」は実験的な機能でしたが、2.6バージョンから、この設定はデフォルトで有効になっています。

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

以下を考慮してくださいpostsコレクション内のドキュメント、投稿テキストおよびタグを含む-

> db.posts.insert({
   "post_text": "enjoy the mongodb articles on w3codebox",
   "tags": ["mongodb", "w3codebox"]
}
{
	"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フィールド上にテキストインデックスを作成しましたので、以下を検索しますw3codeboxテキストに含まれる単語のすべての投稿。

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

上記のコマンドは以下の結果ドキュメントを返します、その結果ドキュメントw3codeboxの投稿テキストに含まれる単語:

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

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

現在のテキストインデックスを削除するには、まず以下のクエリを使用してインデックスの名前を検索してください-

>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 }