mysql 三分分詞 MySQL 中文分詞原理

2021-10-17 20:37:42 字數 3321 閱讀 5094

一,首先我們來了解一下其他幾個知識點:

1. mysql的索引意義?

索引是加快訪問表內容的基本手段,尤其是在涉及多個表的關聯查詢裡。當然,索引可以加快檢索速度,但是它也同時降低了索引列的插入,刪除和更新值的速度。

換通俗的話來講:

mysql中的索引就是乙個特殊的平衡二叉樹,當在平衡二叉樹中搜尋某一條值的時候,上億條的資料可以在十多次內可以塞選出來。

所以,每個資料表裡面有多少個索引就有多少個對應的索引表。

當然,乙個表裡面的索引越多寫入速度會越慢,但讀去速度會越。

mysql的索引型別:

唯一索引。

常規索引。

fulltext索引

spatial索引

hash索引

2. 什麼fulltext索引?

fulltext索引也叫做全文本索引,mysql具備全文搜尋的能力,它可以讓你在不使用模板匹配操作的情況下進行單詞或短語的查詢。

ps:(個人理解)

1. mysql的全文本索引是針對與英文文字的索引(畢竟是別人國外人開發的mysql),我們知道在一篇英文文章中可以發現乙個特點,每個單詞與每個單詞都是以空格隔開的。如果我們把每個單詞看做乙個資料,按照單詞的大小來進行前後排列,也可以形成乙個二叉樹。

2. 有規律可循,有二叉樹,我們就可以對其快速搜尋,並可以對應進行封裝成索引,也就是我們所說的全文本索引————fulltext索引。

3. 注意————fulltext索引只能搜尋英文。

二,使用fulltext搜尋

1. 全文搜尋的特性(重點)

全文搜尋基於fulltext索引。fulltext索引,只能出現在char varchar text這幾種型別的表字段裡面。

全文搜尋會忽略那些常見詞:常見詞,指的是至少一半的行裡都出現過,超過50%的詞,都為常見詞;

有些為內建的常用單詞:也叫停用詞,比如:the/after,other

比較短的單詞也會被停用。

單詞的定義:它們是由字母,數字,撇號和下劃線,構造而成的字串。(英文單詞完全符合,但是中文不行)

可以為乙個字段(列)建立fulltext索引,也可以為多個字段(列)建立乙個fulltext索引。

注意:乙個索引是乙個平衡二叉樹。

1. 如果給a欄位建立乙個索引,當進行全文本搜尋時候,只要命中a欄位即可完成搜尋。

2. 如果為a和b兩個字段同時建立乙個fulltext索引時,它的平衡二叉樹裡面是包括這兩個欄位的所有資料。如果此刻,我們只想對a欄位進行全文本搜尋,這個fulltext是做不到的,只能另外在建立乙個a欄位的fulltext索引。

2全文搜尋分類

自然語言搜尋(預設型別):mysql會把搜尋的字串解析成一系列的單詞,然後去搜尋出包含這些單詞的那些行;

布林模式搜尋:可以為搜尋的字串裡加修飾詞,用於表明某些特定的要求,比如匹配行裡必須出現某些單詞,而且必須按照規定順序出現,或者不能存在某些單詞等。

查詢擴充套件搜尋:這種搜尋分為兩個階段。第一階段,是自然語言搜素。第二階段,則先把原來的搜尋字串,與第一階段的搜尋裡高度匹配的那些行,連線到一起,在一次進行全文本搜尋。

3 mysql語法:

建立索引語法:

建表create table article (title varchar(40),contain text ) engine = myisam;

建立三個索引

alter table article

add fulltext (title),

add fulltext (contain),

add fulltext (title, contain);

4. 自然語言索引

命中title這個fulltext索引,並搜尋包含「hello」這個單詞的所有行。

select * from article where match(title) against("hello");

命中title和contain兩列的這個fulltext索引,並搜尋包含「word」這個單詞的所有行。

select * from article where match(title, contain) against("word");

輸出match()這個mysql函式的返回值——搜尋單詞的權重。

select title, match(title) against("word") as relevance from article ;

注意:其實完整的自然語言搜尋需要新增in natural language mode,如下所示

select * from article where match(title) against("hello" in natural language mode);

5. 布林模式索引

1. 特點

50%一樣的規則:不生效了

查詢結果不再按照相關程度排序

也可以對非fulltext索引列進行搜尋,只是速度相比,有fulltext的速度要慢

2. 使用的方式

基本方式:要在mathc後面加 in boolean mode,(不加說明,預設使用自然排序 in natural language mode)

select * from apothegm where match(phrase) againts('hard' in boolean mode);

按單詞出現順序檢索,把對應單詞用雙引號引起來;

select * from apothegm where match(phrase) againts('「bell book and candle」' in boolean mode);

可以搜尋必須出現,必須不出現,分別用+ 和 -標示:

select * from apothegm where match(phrase) againts('+bell -candle' in boolean mode);

可以用*作為萬用字元,標示以什麼開頭(字首)。但是還是必須遵守,單詞不能過短的約定。

6. 查詢擴充套件全文搜尋(略)

三,中文分詞

1. 中文分詞的作用?

把一段中文,像一篇英文文章一樣,乙個個的單詞(中文文章叫做詞語)使用空格隔開,然後用編碼工具把每個中文詞語編譯成英文本元亂碼,接著,每個英文亂碼之間也用空格間隔,這樣就成功的把一篇中文翻譯成看不懂的英文文章了,我們就可以使用fulltext索引,在這篇看不懂的英文文章中進行全文本搜素。

ps——注意:

1. 中文分詞的主要作用就,把一段中文,切分成乙個個的中文詞語。

2. 然後進過unicode編碼,把每個單詞編碼為英文本元亂碼。

3.這個英文亂碼單詞是符合fulltext索引單詞定義的。

2. 中文分詞的介紹

中文分詞的原理是它有一本自己的字典。一般都有元件,執行某個方法就可以進行中文分詞啦。

Mysql效能優化三(分表 增量備份 還原)

接上篇mysql效能優化二 如果乙個表的記錄數太多了,比如上千萬條,而且需要經常檢索,那麼我們就有必要化整為零了。如果我拆成100個表,那麼每個表只有10萬條記錄。當然這需要資料在邏輯上可以劃分。乙個好的劃分依據,有利於程式的簡單實現,也可以充分利用水平分表的優勢。比如系統介面上只提供按月查詢的功能...

Mysql資料庫的安裝 三分鐘搞定

進入解壓後的bin資料夾 cd d qmdownload softmgr mysql mysql 8.0.23 winx64 mysql 8.0.23 winx64 bin 如果cd後無反應,回車後再輸入 123456是修改後的密碼 alter user root localhost identif...

mysql亂碼原理 MySQL中亂碼原理分析

問題描述 假定建立資料庫時採用的是utf8編碼方式 create database huangweiyi default character set utf8 經常在windows的cmd視窗中插入帶有中文的記錄到mysql表中時會出現插入錯誤,或者在查詢mysql中資料顯示是出現亂碼 首先插入中文...