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

البحث النصي في MongoDB

بداية من إصدار 2.4، بدأ MongoDB في دعم مؤشرات النص للبحث عن محتويات النصوص. البحث النصي (Text Search) يستخدم تقنية تحليل الجذور في الحقول النصية للبحث عن الكلمات المحددة من خلال إزالة الكلمات التي تُستبعد في تحليل الجذور (مثل 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}