使用全文索引技術實現高效的like模糊查詢功能

2021-08-25 23:37:57 字數 595 閱讀 3670

曾經在工作中遇到了乙個難辦的問題:我們有乙個表大概有50萬條資料,其中有乙個欄位是字串型別需要實現like 模糊查詢,我們使用的是mysql,雖然已經建立了索引,但是由於使用的是%a%模式匹配,很不給力,在大量併發下,資料庫會掛掉,或者使用者等到抓狂查詢結果還不出來,後來想出了乙個辦法解決了這個問題,每次查詢可以控制在15ms左右,效果很是不錯。我們採用是全文索引技術:

1、使用lucene或者其他可以提供全文索引的nosql資料庫,比如tt server或mongodb

2、把需要模糊查詢的字段的字串資料進行」全分詞「,即把所有可能分詞都列舉出來,比如abc,可以分成a,ab,abc,b,bc,c

3、把這些分好的term建立索引,如果使用lucene則需要建立乙個分詞器,能把傳入的字串分解成第2步描述的分詞後建立索引,如果使用的是mongodb,則把分好的詞存入乙個字段並且建立索引,如果使用的tt server,那就簡單了,直接建立qgram型別的索引即可,不需要自己去分詞,我們最終就是使用tt server解決的問題

4、使用各自提供的查詢語法進行查詢,絕對高效

最終採用tt server的qgram方式實現,50多萬條資料的模糊查詢時間不超過15毫秒,有快取的情況可能是0ms。

使用全文索引技術實現高效的like模糊查詢功能

曾經在工作中遇到了乙個難辦的問題 我們有乙個表大概有50萬條資料,其中有乙個欄位是字串型別需要實現like 模糊查詢,我們使用的是mysql,雖然已經建立了索引,但是由於使用的是 a 模式匹配,很不給力,在大量併發下,資料庫會掛掉,或者使用者等到抓狂查詢結果還不出來,後來想出了乙個辦法解決了這個問題...

全文索引的使用

sp fulltext database enable 啟動全文索引 sp fulltext catalog member info create 建立全文索引目錄 create unique index pk memberid on member memberid 需要建立唯一索引 sp full...

Mysql 使用全文索引

mysql5.6之前 fulltext索引只支援myisam的表型別,5.6開始在innodb型別中開始支援。建立全文索引需要注意,預設索引詞最小單位是4,一般都需要稍微修改一下,show variables like ft min word len 檢視預設 linux 修改 etc my.cnf...