使用MySQL进行全文索引

使用MYSQL进行全文索引

1. 背景

需要对数据库中某张表里的若干字段进行全文索引。

2. 分析

可以采用三种方法:
1. mysql全文索引
2. lucene进行索引
3. 将mysql数据库转为mongodb
最后决定使用mysql全文索引,省得编码了。

3. 步骤

基本步骤如下:
1. 需要修改数据库引擎,从innodb转为myiam
2. 建立全文索引
3. 查询使用

3.1 修改数据库引擎

use jyonline;
show tables;
alter table paper ENGINE=MyISAM;
alter table question ENGINE=MyISAM;

参考文献 链接

3.2 建立全文索引

对于英文的索引,MySQL很早就已经支持,然而对于中文的索引,MySQL早版本并不是支持的,因此在很早的版本中一般使用插件mysqlcft,在MySQL5.7版本开始支持中文索引。以下是针对5.7版本的中文索引。
早版本链接
5.7版本链接

编辑my.ini文件

首先从windows服务中寻找my.ini的位置,如下图所示。
这里写图片描述

然后打开编辑如下:

[mysqld]
ngram_token_size=2

修改表,增加全文索引

show create table paper;
alter table paper add fulltext index ft_index(name) WITH PARSER ngram;

show create table question;
alter table question add fulltext index ft_index(html) WITH PARSER ngram;

3.3 查询应用

select name from paper where match(name) against('高中')

select html from question where match(html) against('集合');

4. 附录

4.1 查看和删除索引

# 查看并删除索引
SHOW CREATE TABLE paper;

------------------------------------
CREATE TABLE `paper` (
  `id` varchar(36) NOT NULL COMMENT 'guid',
  `html` longtext,
  `subject` varchar(5) DEFAULT NULL COMMENT '学科:\n1,语文\n2,数学\n3,外语\n4,物理\n5,化学\n6,历史\n7,地理\n8,政治\n9,生物',
  `grade` varchar(5) DEFAULT NULL COMMENT '包括初一,初二,初三,中考,高一,高二,高三,高考',
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  FULLTEXT KEY `subject` (`subject`,`grade`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
-------------------------------------------
alter table paper drop index subject;

SHOW CREATE TABLE question;
-------------------------------------------
CREATE TABLE `question` (
  `id` varchar(36) NOT NULL,
  `html` text,
  `answer` text,
  `paper_id` varchar(36) NOT NULL,
  `answer_url` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `html` (`html`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
--------------------------------------------
alter table question drop index html;

4.2 全文索引的搜索方式

参考链接

主要包括三种:自然语言全文搜索、布尔全文搜索和查询扩展全文搜索。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值