MongoDB的全文索引

NO IMAGE

Table of Contents

背景

如何使用

準備工作:插入數據

建立全局索引

查詢結果

使用中存在哪些問題?

英文存在停止詞

中文無法採用全文索引

前面瞭解了多種索引方式,比如單鍵索引,多鍵索引,複合索引等,這些感覺都太空,咱今天學習一下實用的索引——全文索引。

背景

比如我們在慕課中搜索一個內容mongodb,他是在全局搜索,包括課程,猿問,手記等。如果這個時候我們通過常見的查詢,要寫多個模糊查詢,並且性能很慢,比如有些課程的題目中並沒有mongodb,但是課程的簡介中有mongodb,也需要查詢出來。這個對性能的要求就太高了,有可能查詢出來的時間根本忍受不了,就要砸電腦啦。

MongoDB的全文索引MongoDB的全文索引

這個時候我們就可以使用MongoDB的全文索引功能。

如何使用

準備工作:插入數據

我們先做好準備工作,往數據庫裡面插入四條數據,如下圖

MongoDB的全文索引MongoDB的全文索引

MongoDB的全文索引MongoDB的全文索引

建立全局索引

下圖的意思是在name字段上建立全局索引,注意index type為text,意思是建立全局索引。

MongoDB的全文索引MongoDB的全文索引

如果字段選擇了$**,即表示全部字段。下面都是用了在name字段上加了全局索引。

MongoDB的全文索引MongoDB的全文索引

查詢結果

我們查詢name為zhangsan的數據,如下圖。

MongoDB的全文索引MongoDB的全文索引

我們查詢name為zhangsan或lisi的數據,如下圖,空格連接,即空格表示或關係。

MongoDB的全文索引MongoDB的全文索引

我們查詢name為zhangsan,排除為lisi的數據,如下圖,橫槓表示非的關係。

MongoDB的全文索引MongoDB的全文索引

我們查詢name為zhangsan且name為one的數據,如下圖,轉義字符表示引號,如果字符加了引號即表示且的關係。

MongoDB的全文索引MongoDB的全文索引

使用中存在哪些問題?

英文存在停止詞

上面的查詢雖然查詢出來挺好的,但是下面我們將找找他的問題。

比如現在數據庫中的數據如下。

MongoDB的全文索引MongoDB的全文索引

我們要查詢name包含is的數據,按道理來說,我們應該查出兩條數據,可是執行結果如下。

MongoDB的全文索引MongoDB的全文索引

一條數據都沒查出來,這是因為is為停止詞,具體原因:(該段取自www.cnblogs.com/yako/p/6805…)。

原來在英語裡面會遇到很多a,the,or等使用頻率很多的字或詞,常為冠詞、介詞、副詞或連詞等。如果搜索引擎要將這些詞都索引的話,那麼幾乎每個網站都會被索引,也就是說工作量巨大。可以毫不誇張的說句,只要是個英文網站都會用到a或者是the。那麼這些英文的詞跟我們中文有什麼關係呢? 在中文網站裡面其實也存在大量的stopword,我們稱它為停止詞。比如,我們前面這句話,“在”、“裡面”、“也”、“的”、“它”、“為”這些詞都是停止詞。這些詞因為使用頻率過高,幾乎每個網頁上都存在,所以搜索引擎開發人員都將這一類詞語全部忽略掉。如果我們的網站上存在大量這樣的詞語,那麼相當於浪費了很多資源。

中文無法採用全文索引

最大的問題來了,這貨居然不支持中文。啊啊啊,是不是要瘋啦。準確的來說,支持中文的能力沒有想象中強大。

比如數據如下,

MongoDB的全文索引MongoDB的全文索引

我想查詢名稱中包含張的數據,結果是查詢不出來。

MongoDB的全文索引MongoDB的全文索引

但我要查詢名稱中包含李的數據,結果卻有。

MongoDB的全文索引MongoDB的全文索引

這說明MongoDB中文全文索引建立方式與英文幾乎相同 是根據詞(英文單詞)的方式建立的。
如果一個值裡面有多個值 則需要按空格方式隔開,”李 四” 系統則認為是兩個詞。
感覺MongodB的中文全文索引沒有想象中的強大。

MongoDB的全文索引​長按下圖二維碼,即刻關注【學習Java的小姐姐】 領取超多學習資料哦!

MongoDB的全文索引MongoDB的全文索引

相關文章

Windows搭建MongoDB複製集

認識MongoDB複製集

MongoDB的基本操作(增刪改查)

MongoDB的查詢索引