因為這個表有 10萬的文章資料,如果用like 查詢十分緩慢,現狀想到用 fulltext 但是發現找不到資料。
CREATE TABLE `zb_article` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`content_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '純文本,無HTML原始碼',
PRIMARY KEY (`aid`),
FULLTEXT KEY `title` (`title`,`content_text`)
) ENGINE=InnoDB AUTO_INCREMENT=7578 DEFAULT CHARSET=utf8;
insert into zb_article values(NULL,'前廣場工程PPP專案','(高鐵站)(ppp)合同.pdf');
# 有結果
select * from zb_article where match(title,content_text) against('高鐵站');
select * from zb_article where match(title,content_text) against('PPP');
# 以下為空
select * from zb_article where match(title,content_text) against('合同');
select * from zb_article where match(title,content_text) against('廣場');
select * from zb_article where match(title,content_text) against('專案');
uj5u.com熱心網友回復:
mysql 現在不支持中文分詞。猜測字串'(高鐵站)(ppp)合同.pdf'會根據'('和')'分詞,所以你的前兩條查詢可以得到結果。uj5u.com熱心網友回復:
MYSQL 全文索引是實作不了like 的效果。全文索引只能按單詞來查詢。 比如 今天是星期天。
想檢查 星期天 是查不出結果的, 只有 “ 今天是 星期天”,
中間有空格或其它類的間隔開,星期天被認為是一個單詞,才會被查詢出來
uj5u.com熱心網友回復:
CREATE TABLE `zb_article` (`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(200) DEFAULT NULL,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `title` (`title`,`body`) /*!50100 WITH PARSER `ngram` */
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
你上面查詢到結果,你看下你的相關度,是0,要用ngram支持中文才可以
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/72036.html
標籤:MySQL
