100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 基于mysql全文索引的深入理解【MySQL】

基于mysql全文索引的深入理解【MySQL】

时间:2022-01-16 12:20:51

相关推荐

基于mysql全文索引的深入理解【MySQL】

数据库|mysql教程

百度,mysql,技术

数据库-mysql教程

前言:本文简单讲述全文索引的应用实例,MYSQL演示版本5.5.24。

Q:全文索引适用于什么场合?

A:全文索引是目前实现大数据搜索的关键技术。

至于更详细的介绍请自行百度,本文不再阐述。

——————————————————————————–

A、如何设置?

yy语音 源码,vscode安装包下载好慢,ubuntu 关联,tomcat最新漏洞,sqlite 修复表,网页设计背景教程,discuz!服务器,js树形插件,smm框架前端,安全控件爬虫,php身份证验证,seo管家中心,沙箱支付springboot,响应式企业展示型网站,调查问卷网页模板,骗赞红包模板,dedecms 后台登陆模板下载,文件上传页面代码,开源 连锁店 管理系统,窗体程序下载lzw

如图点击结尾处的{全文搜索}即可设置全文索引,不同MYSQL版本名字可能不同。

简单的视频播放源码,vscode 设置代码补全,退出ubuntu命令,tomcat启动请求127,sqlite3时间戳负数,飞鸟爬虫,在线考试系统php源码,綦江区seo优化材料,单页网站平台源码,jquery扁平自适应网站html5模板lzw

B、设置条件

1.表的存储引擎是MyISAM,默认存储引擎InnoDB不支持全文索引(新版本MYSQL5.6的InnoDB支持全文索引)

2.字段类型:char、varchar和text

天鼎订餐系统单店版源码,vscode方法自动注释,ubuntu ape插件,覆盖运行tomcat,sqlite拒绝服务漏洞,知名爬虫社区论坛网站,ecshop 支持php,seo的主要流量,购物交友网站源码,解压网页游戏,iphone模板lzw

C、配置

my.ini配置文件中添加

# MySQL全文索引查询关键词最小长度限制

[mysqld]

ft_min_word_len = 1

保存后重启MYSQL,执行SQL语句

SHOW VARIABLES

查看ft_min_word_len是否设置成功,如果没设置成功请确保

1.确认my.ini正确配置,注意不要搞错my.ini的位置

2.确认mysql已经重启,实在不行重启电脑

其他相关配置请自行百度。

注:重新设置配置后,已经设置的索引需要重新设置生成索引

D、SQL语法

首先生成temp表

CREATE TABLE IF NOT EXISTS `temp` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`char` char(50) NOT NULL,

`varchar` varchar(50) NOT NULL,

`text` text NOT NULL,

PRIMARY KEY (`id`),

FULLTEXT KEY `char` (`char`),

FULLTEXT KEY `varchar` (`varchar`),

FULLTEXT KEY `text` (`text`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

INSERT INTO `temp` (`id`, `char`, `varchar`, `text`) VALUES

(1, ‘a bc 我 知道 1 23’, ‘a bc 我 知道 1 23’, ‘a bc 我 知道 1 23’);

搜索`char`字段 ‘a’ 值

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘a’)

但是你会发现查询无结果?!

这时你也许会想:哎呀怎么回事,我明明按照步骤来做的啊,是不是那里漏了或者错了?

你不要着急,做程序是这样的,出错总是有的,静下心来,着急是不能解决问题的。

如果一个关键词在50%的数据出现,那么这个词会被当做无效词。

如果你想去除50%的现在请使用IN BOOLEAN MODE搜索

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘a’ IN BOOLEAN MODE)

这样就可以查询出结果了,但是我们不推荐使用。

全文索引的搜索模式的介绍自行百度。

我们先加入几条无用数据已解除50%限制

INSERT INTO `temp` (

`id` ,

`char` ,

`varchar` ,

`text`

)

VALUES (

NULL , ‘7’, ‘7’, ‘7’

), (

NULL , ‘7’, ‘7’, ‘7’

), (

NULL , ‘a,bc,我,知道,1,23’, ‘a,bc,我,知道,1,23’, ‘a,bc,我,知道,1,23’

), (

NULL , ‘x’, ‘x’, ‘x’

);

这时你执行以下SQL语句都可以查询到数据

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘a’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘bc’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘我’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘知道’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘1’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (’23’);

以下SQL搜索不到数据

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘b’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘c’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘知’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘道’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘2’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘3’);

如果搜索多个词,请用空格或者逗号隔开

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘a x’);

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST (‘a,x’);

上面的SQL都可以查询到三条数据

E、分词

看到这里你应该发现我们字段里的值也是分词,不能直接插入原始数据。

全文索引应用流程:

1.接收数据-数据分词-入库

2.接收数据-数据分词-查询

现在有个重要的问题:怎么对数据分词?

数据分词一般我们会使用一些成熟免费的分词系统,当然如果你有能力也可以自己做分词系统,这里我们推荐使用SCWS分词插件。

首先下载

1.php_scws.dll 注意对应版本

2.XDB词典文件

3.规则集文件

下载地址

安装scws

1.先建一个文件夹,位置不限,但是最好不要中文路径。

2.解压{规则集文件},把xdb、三个INI文件全部扔到 D:/scws

3.把php_scws.dll复制到你的PHP目录下的EXT文件夹里面

4.在 php.ini 的末尾加入以下几行:

[scws]

; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,

; 再把 php_scws.dll 指定为绝对路径。

extension = php_scws.dll

scws.default.charset = utf8

scws.default.fpath = “D:/scws”

5.重启你的服务器

测试

$str=”测试中文分词”;

$so = scws_new();

$so->send_text($str);

$temp=$so->get_result();

$so->close();

var_dump($temp);

如果安装未成功,请参照官方说明文档

——————————————————————————–

这样我们就可以使用全文索引技术了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。