從2.4版本開始,MongoDB 開始支持文本索引來(lái)搜索字符串內(nèi)容。Text Search(文本搜索) 使用詞干分析技術(shù)在字符串字段中通過(guò)刪除詞干分析停止詞(如 a、 an、 The 等)來(lái)查找指定的詞。目前,MongoDB 支持大約15種語(yǔ)言。
最初,“Text Search(文本搜索)”是一項(xiàng)實(shí)驗(yàn)性功能,但從2.6版開始,默認(rèn)情況下啟用此配置。
考慮以下posts集合中的文檔,其中包含帖子文本及其標(biāo)簽-
> db.posts.insert({
"post_text": "enjoy the mongodb articles on nhooo",
"tags": ["mongodb", "nhooo"]
}
{
"post_text" : "writing tutorials on mongodb",
"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })我們將在post_text字段上創(chuàng)建一個(gè)文本索引,以便我們可以在帖子的文本中進(jìn)行搜索-
>db.posts.createIndex({post_text:"text"})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}現(xiàn)在,我們?cè)趐ost_text字段上創(chuàng)建了文本索引,我們將搜索nhooo文本中包含單詞的所有帖子。
> db.posts.find({$text:{$search:"nhooo"}}).pretty(){
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "enjoy the mongodb articles on nhooo",
"tags" : [
"mongodb",
"nhooo"
]
}上面的命令返回以下結(jié)果文檔,該結(jié)果文檔nhooo的發(fā)布文本中包含單詞:
{
"_id" : ObjectId("53493d14d852429c10000002"),
"post_text" : "enjoy the mongodb articles on nhooo",
"tags" : [ "mongodb", "nhooo" ]}要?jiǎng)h除現(xiàn)有的文本索引,請(qǐng)首先使用以下查詢找到索引的名稱-
>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
}
]
>從上面的查詢中獲取索引的名稱后,運(yùn)行以下命令。在這里,post_text_text是索引的名稱。
>db.posts.dropIndex("post_text_text")
{ "nIndexesWas" : 2, "ok" : 1 }