MySQL全文索引的使用

xuexiaogang發表於2021-12-10

自己原文公眾號: https://mp.weixin.qq.com/s/BhUH6rcQHNGpW7_WQEnScA

有開發求助,要查公司,但是公司帶括號。括號可能是全形的也可能是半形的。這種問題不是第一次見了,見得太多了。大家似乎習慣是輸入時候是任意的,只是查詢時候來做區分。其實這是不對的。就像垃圾分類是在小區垃圾桶做?還是在垃圾處理廠最後一道手續的時候做?顯然前期分類比較合適。

    我們以前做公安系統,錄入路口、路段、座標等等都是有嚴格規定。所以在頁面上你可以隨意輸入,但是輸入框內會自動給你全部轉換成統一格式,以便統一儲存。現在發現我的第一個公司的開發團隊的水平是我經歷過最高的。從設計到實現,不僅規範而且高效。原因是都是70、80的為開發主力或者開發負責人。

說真的看到這個SQL已經沒有除錯的想法了,第一個感覺就是重寫吧。前面不規範欠的債。
解決問題的方法要改變一下:
做個demo樣品。

mysql> create table a (id int auto_increment primary key,user varchar(20), fulltext(user) with parser ngram);

Query OK, 0 rows affected (0.20 sec)


模擬資料以後是這樣的:(資料是隨便編的不一定有這些公司,主要是為了全形和半形的括號)



如果我們命令是

select * from a where user like '%網易%';

查出資料過多。

如果命令是select * from a where user like '%廣州%';

查出資料有不符合的。


既不能多也不能少,而且要處理掉括號。


SQL應該這樣寫:


select * from a where match(user) against ('+網易 +廣州' IN BOOLEAN MODE);



嗯,符合要求。

    Oracle下的實現請看下一篇。PostgreSQL的也有,只是不夠熟練,需要再嘗試一下,陸續推出。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2847121/,如需轉載,請註明出處,否則將追究法律責任。

相關文章