最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mongodb實戰(zhàn)之全文搜索功能

 更新時間:2017年07月31日 08:43:51   作者:jingsam  
全文檢索對每一個詞建立一個索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時,檢索程序就根據(jù)事先建立的索引進行查找,并將查找的結(jié)果反饋給用戶的檢索方式。下面這篇文章主要給大家介紹了Mongodb全文搜索功能的相關(guān)資料,需要的朋友可以參考下。

前言

眾所周知在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中,我們通常將數(shù)據(jù)結(jié)構(gòu)化,通過一系列表關(guān)聯(lián)、聚合來查詢我們所需的結(jié)果。而在非結(jié)構(gòu)化的數(shù)據(jù)中,缺少這種預(yù)定義的結(jié)構(gòu),因而如何快速查詢定位到我們所需要的結(jié)果,不是一件容易的事。

Mongodb作為一種NoSQL數(shù)據(jù)庫,非常適合存儲和管理非結(jié)構(gòu)化數(shù)據(jù),例如互聯(lián)網(wǎng)上的各種文本數(shù)據(jù)。假如我們用Mongodb存儲了很多博客文章,那么如何快速找到所有關(guān)于“nodejs”這個主題的文章呢?Mongodb內(nèi)建的全文搜索可以幫助我們完成這個功能。下面話不多說了,來一起看看詳細(xì)的介紹:

在本篇博文中,將要介紹的是我使用Mongdb text search的一些經(jīng)驗。

Mongodb text search是什么?

Mongodb text search是Mongodb對數(shù)據(jù)庫進行搜索的功能模塊,類似于數(shù)據(jù)庫內(nèi)建的搜索引擎。有些人可能會疑問,查數(shù)據(jù)庫為什么還需要搜索引擎?直接用條件查詢不就得了。例如在前面的文章主題搜索中,我們不可能事先提取出每篇文章的主題,然后用專門的字段存儲,因此沒辦法進行條件查詢。并且同一個主題詞,有多種不同的表達(dá)方式,例如”node”、”nodejs”可視為同一個主題。

Mongodb text search可以自動地對大段的文本數(shù)據(jù)進行分詞處理、模糊匹配、同義詞匹配,解決文本搜索的問題。

建立文本索引

要使Mongodb能夠進行全文搜索,首先要對搜索的字段建立文本索引。建立文本索引的關(guān)鍵字是text,我們既可以建立單個字段的文本索引,也可以建立包含多個字段的復(fù)合文本索引。需要注意的是,每個collection只能建立一個文本索引,且只能對String或String數(shù)組的字段建立文本索引。

我們可以通過以下命令,建立一個文本索引:

db.collection.createIndex({ subject: "text", content: "text" })

在mongoose中我們可以通過以下代碼,創(chuàng)建文本索引:

schema.index({ subject: "text", content: "text" })

需要注意的是:由于每個collection只支持一個文本索引,所以當(dāng)你需要在schema中添加或刪除文本索引字段時,往往不起作用。這時候你需要到數(shù)據(jù)庫中,手動刪除已經(jīng)建立的文本索引。

文本搜索示例

文本搜索的語法為:

{
 $text:
  {
   $search: <string>,
   $language: <string>,
   $caseSensitive: <boolean>,
   $diacriticSensitive: <boolean>
  }
}

在mongoose中,我們可以通過以下語句進行文本搜索:

var query = model.find({ $text: { $search: "hello world" } })

$search后面的關(guān)鍵詞可以有多個,關(guān)鍵詞之間的分隔符可以是多種字符,例如空格、下劃線、逗號、加號等,但不能是-和\",因為這兩個符號會有其他用途。搜索的多個關(guān)鍵字是or的關(guān)系,除非你的關(guān)鍵字包含-。例如hello world會包含所有匹配hello或world的文本,而hello -world只會匹配包含hello且不包含world的文本。

$language指示搜索的語言類型,在最新的Mongodb 3.2 enterprise版本中,已經(jīng)增加了對中文文本的搜索。

$caseSensitive設(shè)置是否區(qū)分大小寫。

$diacriticSensitive設(shè)置是否區(qū)別發(fā)音符號,CAFÉ于Café是同一語義,只是重音不一樣。

我們還可以對搜索的結(jié)果按匹配度進行排序:

db.posts.find(
  { $text: { $search: "hello world" } },
  { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

注意事項

Mongodb建立文本索引時,會對提取所有文本的關(guān)鍵字建立索引,因而會造成一定的性能問題。所以對于結(jié)構(gòu)化的字段,建議用普通的關(guān)系查詢,如果需要對大段的文本進行搜索,才考慮用全文搜索。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持

相關(guān)文章

  • MongoDB常用操作匯總

    MongoDB常用操作匯總

    MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。在高負(fù)載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。MongoDB 旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
    2017-05-05
  • MongoDB db.serverStatus()輸出內(nèi)容中文注釋

    MongoDB db.serverStatus()輸出內(nèi)容中文注釋

    這篇文章主要介紹了MongoDB db.serverStatus()輸出內(nèi)容中文注釋,本文收集了2個版本的中文注釋來講解,需要的朋友可以參考下
    2014-08-08
  • MongoDB orm框架的注意事項及簡單使用

    MongoDB orm框架的注意事項及簡單使用

    MongoDB官方提供的orm的輕量級封裝的 zfoo orm 框架,只對官方提供的進行了簡單的封裝,還做了一些官方不支持的語法校驗。本文介紹了該框架的注意事項及簡單使用
    2021-06-06
  • mongodb運維_動力節(jié)點Java學(xué)院整理

    mongodb運維_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了mongodb運維的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-08-08
  • MongoDB CRUD操作中的插入實例教程

    MongoDB CRUD操作中的插入實例教程

    這篇文章主要給大家介紹了關(guān)于MongoDB CRUD操作中的插入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Centos7 yum安裝mongodb實現(xiàn)步驟詳解

    Centos7 yum安裝mongodb實現(xiàn)步驟詳解

    這篇文章主要介紹了Centos7 yum安裝mongodb實現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • mongodb禁止外網(wǎng)訪問及添加賬號的操作方法

    mongodb禁止外網(wǎng)訪問及添加賬號的操作方法

    這篇文章主要介紹了mongodb禁止外網(wǎng)訪問及添加賬號的操作方法,需要的朋友可以參考下
    2017-12-12
  • MongoDB?Server?用戶名和密碼登錄的操作步驟

    MongoDB?Server?用戶名和密碼登錄的操作步驟

    MongoDB Server默認(rèn)不進行安全認(rèn)證,即任何MongoDB Client都可以連接并擁有操作權(quán)限,這篇文章主要介紹了MongoDB?Server?用戶名和密碼登錄的步驟,需要的朋友可以參考下
    2024-03-03
  • Vercel+MongoDB Atlas部署詳細(xì)指南

    Vercel+MongoDB Atlas部署詳細(xì)指南

    這篇文章主要為大家介紹了Vercel+MongoDB Atlas部署的詳細(xì)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • MongoDB插入數(shù)據(jù)的3種方法

    MongoDB插入數(shù)據(jù)的3種方法

    在MongoDB中,db.collection.insert()方法添加一個新文檔到集合中。另外,db.collection.update()方法和db.collection.save()方法也能通過upsert操作添加新文檔。upsert操作執(zhí)行更新現(xiàn)有文檔或者當(dāng)文檔不存在時插入一個新文檔。
    2014-05-05

最新評論

綦江县| 呼玛县| 桂林市| 莱州市| 明光市| 惠州市| 西峡县| 桃园县| 南和县| 修武县| 和龙市| 潢川县| 仪陇县| 万盛区| 高雄县| 皋兰县| 舞阳县| 海丰县| 盐边县| 商城县| 射阳县| 平利县| 罗城| 新营市| 江永县| 武夷山市| 上饶市| 嘉义市| 广州市| 庆城县| 仙桃市| 板桥市| 丰县| 峨山| 汉川市| 麻江县| 辽阳市| 鄄城县| 喀什市| 南丰县| 滁州市|