版本支持
MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;
MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;
只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。
按顺序操做:
1.修改数据库配置
etc/my.cnf 文件 [mysqld] 下面加入
ngram_token_size=1 //支持中文 日文 韩文检索 没配置这个不能使用中文检索
innodb_ft_min_token_size = 1 //InnoDB 检索单位配置
ft_min_word_len = 1 //MyISAM 检索单位配置
1表示以 一个字符隔开检索 如 : 关键字'abc' 会分割成 a b c 分别去匹配
如果为2的话 是这样分割匹配的 ab bc
2.配置完重启下mysql
3.执行sql创建索引
给goods表的name字段 创建一个解析器为ngram 名称为full_index_name 的fulltext索引
CREATE FULLTEXT INDEX full_index_name ON goods(name) WITH PARSER `ngram`;
4.查询
自然语言的全文索引(默认)
//score表示相关性评分 默认排序是评分倒序
//key是关键词
select *,(MATCH ( `name` ) AGAINST ( 'key' ) )AS score
from goods
where MATCH(name) AGAINST('key' ) ;
布尔全文索引(可以见一些复杂写的限制条件检索 实现更精准的查询)
在布尔搜索中,我们可以在查询中自定义某个被搜索的词语的相关性,当编写一个布尔搜索查询时,可以通过一些前缀修饰符来定制搜索。
-
+ 必须包含该词
-
- 必须不包含该词
-
> 提高该词的相关性,查询的结果靠前
-
< 降低该词的相关性,查询的结果靠后
-
(*)星号 通配符,只能接在词后面
# 必须每个词都有匹配
例如
select * ,(MATCH ( `name` ) AGAINST ( 'key' ) )AS score
from goods
where MATCH(title) AGAINST('+key' IN BOOLEAN MODE) order by score Desc;
完成.
备注 :MySQL ngram全文解析器简介
MySQL内置的全文解析器使用空格确定单词的开始和结束。当涉及汉语,日语或韩语等表意语言语言时,这是一个限制,因为这些语言不使用分词符。
为了解决这个问题,MySQL提供了ngram
全文解析器。自MySQL5.7.6版起,MySQL将ngram
全文解析器作为内置的服务器插件,这意味着当MySQL数据库服务器启动时,MySQL会自动加载该插件。 MySQL支持用于InnoDB和MyISAM存储引擎的ngram
全文解析器。
根据定义,ngram
是来自文本序列的多个字符的连续序列。 ngram
全文解析器的主要功能是将文本序列标记为n
个字符的连续序列。
文章来源:https://www.toymoban.com/news/detail-486411.html
文档上说 MySQL5.7.6之后的版本才支持ngram
全文解析器 我使用的5.7.3版本的mysql 亲测是可以实现的文章来源地址https://www.toymoban.com/news/detail-486411.html
到了这里,关于Mysql 简单实现全文检索(FULLTEXT)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!