MySQL从5.7版本开始支持内置的ngram全文检索插件,专门用于处理中文语义分词。为了使用ngram插件,首先需要在MySQL配置文件中设置分词大小,例如:[mysqld]ngram_token_size=2。这一步设置分词大小,越大则索引体积越大,需根据实际情况调整。创建示例表结构时,可以使用如下SQL语句:CREATE TABLE articles ...    
MySQL全文索引应用简明教程
    MySQL从5.7版本开始支持内置的ngram全文检索插件,专门用于处理中文语义分词。为了使用ngram插件,首先需要在MySQL配置文件中设置分词大小,例如:[mysqld]ngram_token_size=2。这一步设置分词大小,越大则索引体积越大,需根据实际情况调整。
创建示例表结构时,可以使用如下SQL语句:
CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT(title, body) WITH PARSER ngram) ENGINE=InnoDB CHARACTER SET utf8mb4;
插入示例数据如下:
mysql> SELECT * FROM articles;
在ngram插件中,可以显式指定全文检索表源:
SET GLOBAL innodb_ft_aux_table="new_feature/articles";
通过系统表查看数据划分情况:
SELECT * FROM information_schema.INNODB_FT_INDEX_CACHE LIMIT 20, 10;
示例检索操作包括:
1. 自然语言模式检索:如SELECT COUNT(*) FROM articles WHERE MATCH(title, body) AGAINST('数据库' IN NATURAL LANGUAGE MODE);
2. 布尔模式检索:如SELECT * FROM articles WHERE MATCH(title, body) AGAINST('+数据库+管理' IN BOOLEAN MODE);
3. 查询扩展模式:如SELECT * FROM articles WHERE MATCH(title, body) AGAINST('数据库' WITH QUERY EXPANSION);
以上演示了ngram插件在MySQL中的应用,更多性能测试请自行进行。
N-gram作为常用的中文分词算法,已在互联网上广泛应用,这次集成到MySQL中,预计不会对性能造成太大影响。2024-11-14