鍍金池/ 教程/ 數(shù)據(jù)庫/ MongoDB文本搜索
MongoDB教程
MongoDB覆蓋查詢
MongoDB數(shù)據(jù)建模
MongoDB聚合
MongoDB更改用戶密碼和自定義數(shù)據(jù)
MongoDB用戶
MongoDB分片
MongoDB創(chuàng)建集合
MongoDB文本搜索
MongoDB數(shù)據(jù)類型
MongoDB GridFS
MongoDB索引限制
MongoDB插入文檔
MongoDB刪除集合
MongoDB數(shù)據(jù)庫引用
MongoDB復(fù)制
MongoDB Map Reduce
Python連接MongoDB操作
MongoDB原子操作
MongoDB特點(diǎn)
MongoDB安全檢查表
MongoDB排序記錄
MongoDB自動(dòng)遞增序列
MongoDB安裝配置(Windows)
MongoDB備份與恢復(fù)
MongoDB安裝配置(Ubuntu)
Ruby連接MongoDB操作
MongoDB部署
MongoDB索引
MongoDB分析查詢
MongoDB投影(選擇字段)
MongoDB刪除數(shù)據(jù)庫
MongoDB認(rèn)證
MongoDB限制記錄數(shù)
MongoDB添加用戶
MongoDB固定循環(huán)集合
MongoDB高級(jí)索引
MongoDB數(shù)據(jù)庫的優(yōu)點(diǎn)
MongoDB快速入門
MongoDB創(chuàng)建數(shù)據(jù)庫
MongoDB啟用身份驗(yàn)證
MongoDB歷史
MongoDB管理用戶和角色
MongoDB安裝配置(RedHat/CentOS)
MongoDB刪除文檔
Java連接MongoDB操作
MongoDB正則表達(dá)式
MongoDB查詢文檔
MongoDB關(guān)聯(lián)關(guān)系
PHP連接MongoDB操作
MongoDB更新文檔
MongoDB ObjectId

MongoDB文本搜索

MongoDB 2.4版開始,MongoDB開始支持文本索引來搜索字符串內(nèi)容。文本搜索使用詞法技術(shù)通過刪除字符串字詞,如a,an等等來查找字符串字段中的指定單詞。目前,MongoDB支持大約15種語言。

啟用文本搜索

最初,文本搜索是一個(gè)實(shí)驗(yàn)性功能,但從MongoDB 2.4版開始,默認(rèn)情況下啟用配置。 但是,如果使用2.4之前版本的MongoDB,則必須使用以下代碼啟用文本搜索 -

>db.adminCommand({setParameter:true,textSearchEnabled:true})

創(chuàng)建文本索引

請(qǐng)考慮以下文檔,其中包含帖子文字及其標(biāo)簽 -

{
   "post_text": "enjoy the mongodb articles on yiibai tutorials",
   "tags": [
      "mongodb",
      "yiibai tutorials"
   ]
}

我們將在post_text字段上創(chuàng)建一個(gè)文本索引,以便可以在posts的文本中搜索 -

>db.posts.ensureIndex({post_text:"text"})

使用文本索引

現(xiàn)在我們已經(jīng)在post_text字段上創(chuàng)建了文本索引,下面在其文本中搜索所有帶有“yiibai”一詞的帖子。

>db.posts.find({$text:{$search:"yiibai"}})

上述命令返回以下結(jié)果文件,其文本中包含“yiibai”一詞 -

{ 
   "_id" : ObjectId("595b99e2f6a6243715b3c316"), 
   "post_text" : "enjoy the mongodb articles on yiibai", 
   "tags" : [ "mongodb", "yiibai" ]
}
{
   "_id" : ObjectId("595b99e2f6a6243715b3c317"), 
   "post_text" : "writing yiibai tutorials on mongodb",
   "tags" : [ "mongodb", "tutorial" ] 
}

如果您使用舊版本的MongoDB,則必須使用以下命令 -

>db.posts.runCommand("text",{search:" yiibai "})

與正常搜索相比,使用文本搜索極大地提高了搜索效率。

刪除文本索引

要?jiǎng)h除現(xiàn)有的文本索引,首先使用以下查詢找到索引的名稱 -


>db.posts.getIndexes()

從上面的查詢獲取索引的名稱后,運(yùn)行以下命令。 這里,post_text_text是索引的名稱。

>db.posts.dropIndex("post_text_text")