纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

MySQL 全文索引 MySQL 全文索引使用指南

岛上码农   2021-05-25 我要评论
想了解MySQL 全文索引使用指南的相关内容吗岛上码农在本文为您仔细讲解MySQL 全文索引的相关知识和一些Code实例欢迎阅读和指正我们先划重点:MySQL,全文索引,MySQL,索引下面大家一起来学习吧

全文索引需要特殊的查询语法有没有索引都可以进行全文检索但是存在索引时会提高匹配的速度全文索引的索引通过特殊的结构存储以便于找到文档中包含搜索关键字对应的内容在我们日常生活中最常见的全文检索就是网络搜索引擎虽然网络搜索引擎的数据里十分庞大并且通常也不会使用关系型数据库但是原理是相似的

全文索引支持通过基于字符(CHAR、VARCHAR 和 TEXT 类型的列)的检索也可以支持自然语言模式(Natural Language Mode 默认)和布尔模式 (Boolean Mode)例如我们搜索“数据库引擎”的时候内容中包括“数据库”、“引擎”和“数据库引擎”的内容都会检索出来全文索引的实现有大量的限制而且十分复杂但是由于内置在MySQL服务端而且对很多应用都能够满足要求因此被广泛使用

在MySQL5.6之前的版本中只有 MyISAM 存储引擎支持全文索引创建全文索引需要指定列标记为全文索引如下面的 content 列

CREATE TABLE t_news (
	id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	content TEXT,
	author VARCHAR(32),
	title VARCHAR(128),
  FULLTEXT (content)
) ENGINE=InnoDB;

MySQL 5.6以前对中文搜索支持不是太好需要自己进行分词后将段落预处理拆分成单词在入库MySQL5.7.6后才有了内置的分词器 ngramngram 支持设置设置分词的长度可以将中文按长度拆分为不同的单词(虽然不太智能但满足大部分场景)可以通过 MySQL 的全局变量ngram_token_size设置分词长度默认是2支持1-10可选对于上面的例子需要指定分词器构建全文索引

CREATE TABLE t_news (
  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	content TEXT,
	author VARCHAR(32),
	title VARCHAR(128),
  FULLTEXT KEY idx(content) WITH PARSER ngram
) ENGINE=InnoDB;

插入一条数据测试

INSERT INTO `t_news` 
(`id`, `content`, `author`, `title`) 
VALUES ('1', '我有一个数据库和引擎', '岛上码农', '数据库引擎');

在简单的模糊搜索中可以使用 LIKE 来完成而对于全文检索需要使用如下方式的语句:

SELECT * FROM t_news 
WHERE MATCH (content) AGAINST ('数据 引擎' IN NATURAL LANGUAGE MODE)

通过这种方式可以检索出刚刚插入的内容而如果使用 LIKE 是没法完成的也支持使用相关性排序再插入一条数据:

INSERT INTO `t_news`
(`id`, `content`, `author`, `title`) 
VALUES (2,'我有一个数据库','岛上码农','数据库')

然后执行排序查询:

SELECT *, MATCH (content) AGAINST ('数据 引擎' ) AS relevance
FROM t_news 
WHERE MATCH (content) AGAINST ('数据 引擎' ) 
ORDER BY relevance ASC

这里将匹配值作为一列查询以便使用其别名进行排序相关性越高对应的 relevance 值越大因此可以用作排序入股不相关那么 relevance 的值为0

布尔模式可以做更多的控制例如包括使用+号保留匹配结果和使用-号排除匹配结果下面的就匹配了数据而排除了包含引擎的数据更多操作符可以参考 MySQL 的官方文档:全文索引操作符

SELECT * FROM t_news 
WHERE MATCH (content) AGAINST ('+数据* -引擎' IN BOOLEAN MODE);

相关文章

猜您喜欢

  • CSS伪元素的妙用单标签之美 详解CSS伪元素的妙用单标签之美

    想了解详解CSS伪元素的妙用单标签之美的相关内容吗ChokCoco在本文为您仔细讲解CSS伪元素的妙用单标签之美的相关知识和一些Code实例欢迎阅读和指正我们先划重点:css,伪元素下面大家一起来学习吧..
  • Java数独小游戏 Java实现数独小游戏

    想了解Java实现数独小游戏的相关内容吗dog_egg0327在本文为您仔细讲解Java数独小游戏的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java,数独下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式