您好,登錄后才能下訂單哦!
本篇內容介紹了“MySQL fulltext index檢索中文有哪些注意事項”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1、查看表結構
mysql> show create table product_test02; | Table | Create Table | product_test02 | CREATE TABLE `product_test02` ( `product_id` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `artisan_id` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `des` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', `zhima_price` double(11,2) DEFAULT NULL, `market_price` double(11,2) DEFAULT NULL, `cover_pic` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `work_time` int(11) DEFAULT NULL, `comment_count` int(11) DEFAULT NULL, `like_count` int(11) DEFAULT NULL, `produt_consist` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `keep_time` int(11) DEFAULT NULL, `create_at` timestamp NULL DEFAULT NULL, `fav_count` int(11) DEFAULT NULL, `width` int(11) DEFAULT NULL, `height` int(11) DEFAULT NULL, `is_publish` int(11) DEFAULT NULL, `is_top` int(11) DEFAULT NULL, `is_delete` int(11) DEFAULT NULL, `sell_amount` int(11) DEFAULT '0', `free_service_time` int(11) DEFAULT NULL, `update_time` timestamp NULL DEFAULT NULL, `other_1` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `other_2` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `other_3` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `other_4` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `other_5` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `is_audit` tinyint(1) DEFAULT '0', `audit_time` timestamp NULL DEFAULT NULL, `is_undercarriage` tinyint(1) DEFAULT '0', `undercarriage_time` timestamp NULL DEFAULT NULL, `category` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `active_tag_dict_id` bigint(20) DEFAULT NULL, `active_price` double(11,1) DEFAULT NULL, `weight` int(11) unsigned DEFAULT '0', `fit_people` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `matter_attent` varchar(800) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `category_lv2_id` int(11) DEFAULT NULL, `artisan_visit` int(1) DEFAULT '1', `customer_visit` int(1) DEFAULT '0', `customer_zhima_price` double(11,2) DEFAULT NULL, `customer_market_price` double(11,2) DEFAULT NULL, `service_sex` int(1) DEFAULT '0', `service_mode` tinyint(2) DEFAULT '0' , `last_update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `sell_price` double(11,2) NOT NULL DEFAULT '0.00', `is_new` int(1) NOT NULL, `spu_id` int(11) DEFAULT NULL, `category_id` int(11) DEFAULT NULL, `other_info` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `product_type` int(2) NOT NULL DEFAULT '0' , `product_code` varchar(15) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、在name字段創建fulltext索引
mysql> alter table product_test02 add FULLTEXT index ft_indx_name (name) WITH PARSER ngram; Query OK, 0 rows affected, 1 warning (3 min 45.93 sec)
3、利用fulltext index進行檢索
mysql> select name from product_test02 where match(name) against ('頭部' in boolean mode) limit 1; +---------------------+ | name | +---------------------+ | 頭部按*摩+撥筋 | +---------------------+ 1 row in set (0.00 sec)
mysql> select name from product_test02 where match(name) against ('頭' in boolean mode) limit 1; Empty set (0.00 sec)
經查詢:這個是數據庫ft_min_word_len參數有關,默認為4,至少檢索4個字符,被檢索字符串長度小于4個字符將檢索不到。
4、改參數ft_min_word_len = 1并重啟實例
mysql> show variables like 'ft%'; +--------------------------+----------------+ | Variable_name | Value | +--------------------------+----------------+ | ft_boolean_syntax | + -><()~*:""&| | | ft_max_word_len | 84 | | ft_min_word_len | 1 | | ft_query_expansion_limit | 20 | | ft_stopword_file | (built-in) | +--------------------------+----------------+
5、再次查詢
mysql> select name from product_test02 where match(name) against ('頭' in boolean mode) limit 1; Empty set (0.01 sec)
依然查詢不到,原因是ft_min_word_len 參數改完之后,必須重建所有fulltext index
6、重建fulltext index并檢索
mysql> select name from product_test02 where match(name) against ('頭部' in boolean mode) limit 1; Empty set (0.00 sec) mysql> select name from product_test02 where match(name) against ('3' in boolean mode) limit 1; Empty set (0.00 sec)
經查詢,ngram_token_size=2 #用中文檢索分詞插件ngram之前,先得在MySQL配置文件里面設置他的分詞大小
7、更改參數ngram_token_size=1,并重啟實例
mysql> show variables like 'ng%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | ngram_token_size | 1 | +------------------+-------+ 1 row in set (0.01 sec) mysql> select name from product_test02 where match(name) against ('頭部' in boolean mode) limit 1; +---------------------------------------------+ | name | +---------------------------------------------+ | 【頭疼必拍】頭部舒壓+經絡疏通 | +---------------------------------------------+ 1 row in set (0.01 sec) mysql> select name from product_test02 where match(name) against ('頭' in boolean mode) limit 1; +--------------------------------------------------+ | name | +--------------------------------------------------+ | 頭部撥筋頭暈頭痛失眠【頭部調理】 | +--------------------------------------------------+ 1 row in set (0.01 sec)
可以正常檢索。
“MySQL fulltext index檢索中文有哪些注意事項”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。