Mysql——全文索引

article/2025/11/4 21:18:54

概念:

一般查询都是根据数值范围或者精准的字符串进行数据过滤查询,而全文索引则通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值或字符串比较。

版本支持:

  • 在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。
  • 从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。
  • 只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。

ngram全文解析器配置:

MySQL 中使用全局变量ngram_token_size来配置ngram中分词的大小,它的取值范围是1到10,默认值是2。如果需要搜索单字,就要把ngram_token_size设置为1。在默认值是2的情况下,搜索单字是得不到任何结果的。

全局变量ngram_token_size的两种设置方法:
1、启动mysqld命令时

mysqld --ngram_token_size=2

2、修改MySQL配置文件

[mysqld] 
ngram_token_size=2

全文检索模式(两种):

/*
创建表  
‘INT(10)、VARCHAR(20)’指数据类型(长度)   
‘NOT NULL、ZEROFILL、AUTO_INCREMENT、DEFAULT、COMMENT’分别指属性非空、补零、自增、添加默认值、添加备注
‘PRIMARY KEY’指设置主键
‘ENGINE=INNODB’指数据库引擎为INNODB
‘CHARSET=UTF8’指字符集为UTF8
*/ 
CREATE TABLE `goods`( 
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '商品表id',
`good_name` VARCHAR(20) NOT NULL DEFAULT 'NULL' COMMENT '商品名',
`good_num` INT(10) NOT NULL DEFAULT 0 COMMENT '商品数量',
`good_barcode` INT(20) ZEROFILL NOT NULL  COMMENT '商品编码',
`add_time` INT(11) COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=UTF8;#插入多条数据
INSERT INTO `goods` (`good_name`,`good_num`,`good_barcode`,`add_time`) VALUES ('手机','6','888','0'),('鞋子','7','999','0'),
('美版手机iphone','3','555','0'),('大陆手机华为','2','666','0'),('袜子','3','777','0');-- 添加FULLTEXT(全文索引) 
ALTER TABLE `goods` ADD FULLTEXT (`good_name`) WITH PARSER ngram;

1、自然语言模式(NATURAL LANGUAGE MODE)
自然语言模式是MySQL 默认的全文检索模式。自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现等复杂查询。

#不指定模式,默认使用自然语言模式
SELECT * FROM `goods` WHERE MATCH (`good_name`) AGAINST ('手机') ORDER BY id;

结果:在这里插入图片描述
2、BOOLEAN模式(BOOLEAN MODE)
BOOLEAN模式可以使用操作符,可以支持指定关键词必须出现或者必须不能出现或者关键词的权重高还是低等复杂查询。

#使用BOOLEAN MODE模式,需要指定 IN BOOLEAN MODE 
SELECT * FROM `goods` WHERE MATCH (`good_name`) AGAINST ('+手机 -美版' IN BOOLEAN MODE);'apple banana' :无操作符,表示或,要么包含apple,要么包含banana'+apple +juice':必须同时包含两个词'+apple macintosh':必须包含apple,但是如果也包含macintosh的话,相关性会更高。'+apple -macintosh':必须包含apple,同时不能包含macintosh。'+apple ~macintosh':必须包含apple,但是如果也包含macintosh的话,相关性要比不包含macintosh的记录低。'+apple +(>juice <pie)':查询必须包含apple和juice或者apple和pie的记录,但是apple juice的相关性要比apple pie高。'apple*':查询包含以apple开头的单词的记录,如apple、apples、applet。'"some words"':使用双引号把要搜素的词括起来,效果类似于like '%some words%',例如“some words of wisdom”会被匹配到,而“some noise words”就不会被匹配。

http://chatgpt.dhexx.cn/article/9ppdnuLi.shtml

相关文章

全文索引原理详解

一、总论 根据http://lucene.apache.org/java/docs/index.html 定义&#xff1a; Lucene 是一个高效的&#xff0c;基于Java 的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。 那么什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中的…

mysql 全文索引使用以及限制

项目场景&#xff1a; 最近在做性能优化&#xff0c;有使用到全文索引&#xff0c;做下记录。 问题描述 我们在做列表查询的时候&#xff0c;大多数情况都会遇到 like %%的查询&#xff0c;而这种查询会让索引失效 在数据量较大的时候&#xff0c;会让查询变得很慢&#xff0…

Mysql全文索引解析

parser与N-gram Parser分词器选择 及 ft_min_word_len与innodb_ft_min_token_size的区分及界定 学习《高性能mysql&#xff08;第三版&#xff09;》这本书时&#xff0c;学到了全文索引这一张节&#xff0c;但作者当时使用的版本是MySQL 5.5&#xff0c;届时只有MyISAM引擎支…

全文索引原理介绍

一、总论 根据http://lucene.apache.org/java/docs/index.html 定义&#xff1a; Lucene 是一个高效的&#xff0c;基于Java 的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。 那么什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中的…

什么是全文索引,为什么要使用全文索引?

MySQL中什么是全文索引&#xff0c;为什么要使用全文索引&#xff1f; 1.全文索引在查找上方面其效率是普通模糊&#xff08;like&#xff09;查询的N倍2.MySQL 5.7.6 之后的版本innodb支持全文索引3.修改配置文件 my.ini 或者my.conf 增加以下配置innodb_ft_min_token_size …

MySQL全文索引怎么创建

mysql全文索引 很慢&#xff0c;速度不如like的百分之一 从explain开始说起吧&#xff0c;很显然第一个sql语句压根没用任何索引(key列内什么都没有)&#xff01;第二个倒是用到索引&#xff0c;却是主键索引&#xff0c;并非你添加的fulltext索引&#xff01; 接下来&#xff…

SQL Server 全文索引的应用

在公司项目中提出了一个需求&#xff1a; 搜索包含指定关键词的数据。得到这需求后&#xff0c;站在技术角度考虑第一时间就联想到使用SQL里面“like”查询语句。进一步分析需求后&#xff0c;发现“Like”查询满足不到实际的要求。 示例&#xff1a; ---------------------…

全文检索

本文我将为大家讲解全文检索技术——Lucene&#xff0c;现在这个技术用到的比较多&#xff0c;我觉得大家还是应该掌握一下&#xff0c;不说多精通&#xff0c;但是应该有所了解。在讲解之前&#xff0c;我们先来看一个案例&#xff0c;通过该案例引出全文检索技术——Lucene。…

mysql全文索引使用

一、前言 在以前的博客中小编介绍过mysql的执行流程&#xff0c;索引优化等。正好前一段时间项目有一个新的需求&#xff0c;就重新调研了一下mysql的全文索引&#xff0c;并对mysql的全文索引进行了压测&#xff0c;看看性能怎么样。以判断是否使用。——可想而知&#xff0c;…

MySQL使用全文索引(fulltext index) 及中文全文索引使用

全文索引介绍 ----------------------------------------------------------------------------------------------------------------------------- 1.创建全文索引(FullText index) 旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。 不过新版的My…

索引和全文检索

目录 索引 全文检索 学习类容&#xff1a;索引和全文检索 索引 索引&#xff1a;对数据库中一列或多列的值进行排序的一种结构 作用&#xff1a;合理的使用索引可以加速检索表中的数据。 分类&#xff1a; 按键列个数区分&#xff1a;单列索引&#xff0c;多列索引。 按…

MySQL使用全文索引(fulltext index)

1.创建全文索引(FullText index) 旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引&#xff0c;所以具体信息要随时关注官网&#xff0c; 1.1. 创建表的同时创建全文索引 CREATE TABLE article ( …

MySQL 全文索引

说到查询&#xff0c;日常中常用的baidu&#xff0c;cnbing ,google等之类的网站。关系型数据库中的全文索引应该也是从这些搜索引擎里摸索出来的。 全文索引介绍&#xff1a; 在数据库中常用的查询方式一般是 等价&#xff0c;范围方式。当然也有LIKE %的模糊查询&#xff0c…

MySQL索引系列:全文索引

什么是全文索引&#xff1f; 全文索引首先是 MySQL 的一种索引类型&#xff0c;也是搜索引擎的关键技术。 试想在1M大小的文件中搜索一个词&#xff0c;可能需要几秒&#xff0c;在100M的文件中可能需要几十秒&#xff0c;如果在更大的文件中搜索那么就需要更大的系统开销&am…

全文索引简介

全文索引技术就是将各种信息&#xff0c;文档中所有的文字序列都作为检索对象&#xff0c;找出包含检索词汇的信息或文档。 全文索引在数据库中一般是作为单独模块使用的&#xff0c;如MYSQL全文检索工具——Sphinx&#xff0c;一般全文索引模块需要配合数据库的存储方式进行处…

【MySQL】全文索引详解

文章目录 &#x1f340;全文索引概述 &#x1f340;全文索引的创建 &#x1f340;创建表时定义索引 &#x1f340;在已存在表上创建 &#x1f340;执行create语句 &#x1f340;执行ALTER TABLE语句 全文索引概述 全文索引主要对字符串类型建立基于分词的索引&#xff0c…

html怎么异步传数据,用jQuery实现异步通信(用json传值)方法步骤

jQuery是时下比较流行的一个js库&#xff0c;能够用简单的代码做出理想的效果&#xff0c;就像官网上说的那样“write less ,do more”。Jquery在一定程度上改写了以往对JavaScript的写法&#xff0c;本人就用jquery实现上篇中用ajax实现异步通信的效果&#xff0c;感受一下jqu…

用jQuery实现异步通信(用json传值)具体思路

jQuery是时下比较流行的一个js库&#xff0c;能够用简单的代码做出理想的效果&#xff0c;就像官网上说的那样“write less ,do more”。Jquery在一定程度上改写了以往对JavaScript的写法&#xff0c;本人就用jquery实现上篇中用ajax实现异步通信的效果&#xff0c;感受一下jqu…

jQuery的toggle

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><!--引入jq框架--><script src"https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script></head><body>…

12.jQuery技术

一、jQuery知识点总览。 css&#xff08;&#xff09;方法&#xff1a;//通过css&#xff08;&#xff09;方法获取样式值let backgroundcolor $("#one").css("backgroundColor");alert(backgroundcolor);//通过css&#xff08;&#xff09;方法设置id为…