本文整理自网络,侵删。
目录
- 基于 Mysql 实现一个搜索引擎
- 一、ngram 全文解析器
- 二、创建全文索引
- 1、建表时创建全文索引
- 2、通过 alter table 方式
- 3、通过 create index 方式
- 三、检索方式
- 1、自然语言检索(NATURAL LANGUAGE MODE)
- 四、与 Like 对比
基于 Mysql 实现一个搜索引擎
前言:
其实 Mysql 很早就支持全文索引了,只不过一直只支持英文的检索,从5.7.6 版本开始,Mysql 就内置了 ngram 全文解析器,用来支持中文、日文、韩文分词。
Mysql 全文索引采用的是倒排索引的原理,在倒排索引中关键词是主键,每个关键词都对应着一系列文件,这些文件中都出现了这个关键词。这样当用户搜索某个关键词时,排序程序在倒排索引中定位到这个关键词,就可以马上找出所有包含这个关键词的文件。
本文测试,基于 Mysql 8.0 版本,数据库引擎采用的是 InnoDB
一、ngram 全文解析器
ngram 就是一段文字里面连续的 n 个字的序列。ngram 全文解析器能够对文本进行分词,每个单词是连续的 n 个字的序列。例如,用 ngram 全文解析器对“你好靓仔”进行分词:
n=1: '你', '好', '靓', '仔' n=2: '你好', '好靓', '靓仔' n=3: '你好靓', '好靓仔' n=4: '你好靓仔'
MySQL 中使用全局变量 ngram_token_size
来配置 ngram 中 n 的大小,它的取值范围是1到10,默认值是 2。通常 ngram_token_size
设置为要查询的单词的最小字数。如果需要搜索单字,就要把 ngram_token_size
设置为 1。在默认值是 2 的情况下,搜索单字是得不到任何结果的。因为中文单词最少是两个汉字,推荐使用默认值 2。
可以通过以下命令查看 Mysql 默认的 ngram_token_size
大小:
show variables like 'ngram_token_size'
有两种方式可以设置全局变量 ngram_token_size
的值:
(1)启动 mysqld 命令时指定:
mysqld --ngram_token_size=2
(2)修改 Mysql 配置文件 my.ini,末尾增加一行参数:
ngram_token_size=2
二、创建全文索引
1、建表时创建全文索引
CREATE TABLE `article` ( `id` bigint NOT NULL, `url` varchar(1024) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `title` varchar(256) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `source` varchar(32) COLLATE utf8mb4_general_ci DEFAULT '', `keywords` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, `publish_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `title_index` (`title`) WITH PARSER `ngram` ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2、通过 alter table 方式
ALTER TABLE article ADD FULLTEXT INDEX title_index(title) WITH PARSER ngram;
3、通过 create index 方式
CREATE FULLTEXT INDEX title_index ON article (title) WITH PARSER ngram;
三、检索方式
1、自然语言检索(NATURAL LANGUAGE MODE)
自然语言模式是 MySQL 默认的全文检索模式。自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现等复杂查询。
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 基于 Mysql 实现一个简易版搜索引擎
相关推荐
评论
管理员已关闭评论功能...