烟台制作网站的公司,网站备案要什么,网络服务器可提供的常见服务哪四个,免费门户网站开发在MySQL中#xff0c;MATCH……AGAINST是全文索引#xff08;Full-Text index#xff09;的查询语法#xff0c;它允许你对文本进行高效的全文搜素#xff0c;支持自然语言搜索和布尔搜索模式。以下是MATCH……AGAINST的详细用法和示例
一、全文索引的基本概念 全文索引适…在MySQL中MATCH……AGAINST是全文索引Full-Text index的查询语法它允许你对文本进行高效的全文搜素支持自然语言搜索和布尔搜索模式。以下是MATCH……AGAINST的详细用法和示例
一、全文索引的基本概念 全文索引适用于CHAR、VARCHAR和TEXT类型的列 全文索引支持自然语言搜索和布尔搜索 全文索引只能用于MyISAM和InnoDB存储引擎MySQL5.6及以上版本支持InnoDB的全文索引
二、创建全文索引
在需要使用全文索引的列上创建全文索引
示例
CREATE TABLE articles (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,content TEXT NOT NULL,FULLTEXT (title, content) -- 在title和content列上创建全文索引
);
三、自然语言搜索
自然语言搜索是全文索引的默认模式。它会根据搜索词的相关性返回结果
SELECT * FROM table_name
WHERE MATCH(column1, column2, ...) AGAINST(search_term);
示例
-- 插入数据
INSERT INTO articles (title, content) VALUES
(MySQL Tutorial, This is a tutorial about MySQL.),
(Advanced MySQL, Learn advanced techniques in MySQL.),
(PostgreSQL vs MySQL, A comparison between PostgreSQL and MySQL.);
-- 自然语言搜索
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(MySQL); 结果 返回包含MySQL的记录并按相关性排序 相关性得分可以通过MATCH……AGAINST的结果获取 SELECT id, title, MATCH(title, content) AGAINST(MySQL) AS score
FROM articles
WHERE MATCH(title, content) AGAINST(MySQL);
四、布尔搜索
布尔搜素允许使用特定的操作符来精确控制搜索行为
语法
SELECT * FROM table_name
WHERE MATCH(column1, column2, ...) AGAINST(search_term IN BOOLEAN MODE);
常用操作符 必须包含该词。 -必须不包含该词。 *通配符匹配以指定词开头的词。 短语搜索匹配完整短语。 ()分组操作符。
示例
-- 必须包含MySQL且不包含PostgreSQL
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(MySQL -PostgreSQL IN BOOLEAN MODE);
-- 包含MySQL或PostgreSQL
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(MySQL PostgreSQL IN BOOLEAN MODE);
-- 包含以My开头的词
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(My* IN BOOLEAN MODE);
-- 包含完整短语MySQL Tutorial
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(MySQL Tutorial IN BOOLEAN MODE);
五、相关性排序
全文索引会为每条记录计算一个相关性得分Relevance Score可以根据得分对结果进行排序。
示例
SELECT id, title, MATCH(title, content) AGAINST(MySQL) AS score
FROM articles
WHERE MATCH(title, content) AGAINST(MySQL)
ORDER BY score DESC;
六、全文索引的限制 最小词长度默认情况下MySQL全文索引会忽略长度小于4的词。可以通过修改ft_min_word_lenMyISAM或innodb_ft_min_token_sizeInnoDB参数调整 停用词全文索引会忽略常见的停用词如the、and等。可以通过修改ft_stopword_file参数自定义停用词列表。 中文支持MySQL的全文索引对中文支持较差通常需要配合分词工具如ngram使用。
七、 配置全文索引
修改最小词长度
-- 查看当前配置
SHOW VARIABLES LIKE innodb_ft_min_token_size;
-- 修改配置需要重启MySQL
SET GLOBAL innodb_ft_min_token_size 2;
使用ngram分词器支持中文
-- 创建表时指定ngram分词器
CREATE TABLE articles (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,content TEXT NOT NULL,FULLTEXT (title, content) WITH PARSER ngram
);
-- 查询时使用ngram分词器
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(关键词 IN BOOLEAN MODE);
八、 删除全文索引
如果需要删除全文索引可以使用以下语法
ALTER TABLE table_name DROP INDEX index_name;
示例
ALTER TABLE articles DROP INDEX title;
九. 全文索引的性能优化 索引列选择只为需要搜索的列创建全文索引避免不必要的索引开销。 分词器选择对于中文搜索使用ngram分词器。 缓存结果对于高频查询可以将结果缓存到Redis等缓存系统中。