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 }