a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > MongoDB > 正文

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

2020-03-14 12:53:55
字體:
來源:轉載
供稿:網友

前言

眾所周知在傳統的關系型數據庫中,我們通常將數據結構化,通過一系列表關聯、聚合來查詢我們所需的結果。而在非結構化的數據中,缺少這種預定義的結構,因而如何快速查詢定位到我們所需要的結果,不是一件容易的事。

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

在本篇博文中,將要介紹的是我使用Mongdb text search的一些經驗

Mongodb text search是什么?

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

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

建立文本索引

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

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

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

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

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

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

文本搜索示例

文本搜索的語法為:

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

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

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

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

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

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

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

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

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

注意事項

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持


注:相關教程知識閱讀請移步到MongoDB頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线观看免费毛片视频 | 黄色毛片免费看 | 成人av影视在线观看 | 免费国产成人 | 九九九久久国产免费 | 国产三区二区一区 | 亚洲最新视频在线观看 | 国产精品一区二区三区不卡视频 | 青青草精品 | 成人在线视频网址 | 久久国产成人午夜av影院宅 | 久久av一区二区三区 | 最近最新中文字幕 | 91国内产香蕉 | 日韩最新网址 | 香蕉一区二区 | 午夜影院免费体验区 | 午夜香蕉视频 | 亚洲一区二区中文字幕 | 亚洲欧美在线一区二区 | 伊人成人222| 欧美一级欧美三级在线观看 | 日韩欧美中文在线 | 狠狠综合久久av一区二区老牛 | 在线色av | 国产一级影片 | 久久草在线视频 | 欧美三级电影在线播放 | 国产精品一区二区日韩新区 | 亚洲精品3区| 亚洲久久| 欧美日本一区视频免费 | 亚洲精品美女久久久 | 成人影院一区二区三区 | 欧美日韩在线免费观看 | 亚洲成人综合视频 | 黄色性视频 | 国产激情在线 | 一区二区精品视频 | 色综合天天综合网国产成人网 | 久久久一 |