[MySQL] mysql 全文檢索 與中文斷字斷詞
起因: mysql的全文檢索對中文不相容,因為中文文字間無空格,不像英文單字間本有空格斷字
故mysql全文檢索引擎對英文搜尋沒甚麼問題,但對中文預設是無法搜尋
e.g "今天中華民國生日" 用"中華民國" 無法查詢
但 若內容是 "今天 是 中華民國 生日" 則可搜尋到
1.設定mysql 全文檢索欄位
2.設定my.cnf
ft_min_work_len
3.中文斷字
使用結巴斷字jieba-php
4.mysql fulltext 查詢語法
1.設定mysql 全文檢索欄位
alter table advertisement add fulltext index (title,content)
2.設定查詢文字長度=2
查詢目前設定
show variables like 'ft_min%';
a.修改:my.cnf
[mysqld]
max_allowed_packet = 1073741824
ft_min_word_len = 2
[synology]
my.cnf 位置
/var/packages/MariaDB/etc/my.cnf
b.重啟服務
service mysql resstart
[synology]
sudo synoservicecfg --list #服務清單
sudo synoservicecfg -restart pkgctl-MariaDB #重啟MariaDB服務
3.中文斷字
使用結巴斷字jieba-php http://jieba-php.fukuball.com/
在資料異動時,除了原本欄位content,另外儲存拆字後的欄位content_fulltext for 檢索專用
範例程式碼
1.這的資料異動的後續動作使用laravel的Queue機制(建立job,使用job::dispatch 存入) 參考Laravel-Queue
2.並於linux開機啟動時執行監聽queue : php56 artisan queue:listen 參考:官方Synology 啟動script
或 另一篇synology 開機啟動程式筆記
4.mysql fulltext 查詢語法
e.g select * from advertisement where match(content_fulltext) against ('中華民國' in boolean mode)
[boolean mode 語法]
+中華民國 :內含
-中國大陸 :不含
中華民國* : 萬用字元(中華開頭) e.g 中華民國 中華民國在台灣