1. 程式人生 > >使用全文索引技術實現高效的like模糊查詢功能

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

曾經在工作中遇到了一個難辦的問題:我們有一個表大概有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。