当前位置:   article > 正文

like不能用索引!mysql全文索引(FULLTEXT)最简实践_mysql fulltext 使用

mysql fulltext 使用
  1. 简介

它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。

select * fromarticle where content like ‘%xxx%’;

这种写法查询效率非常低。全文索引就是为了高效的解决这种问题产生的。

全文索引,以前只有MyISAM引擎支持。

Mysql5.6后开始默认使用InnoDb引擎,并且5.6.4版本后的InnoDb引擎开始支持全文索引。

目前只有 CHAR、VARCHAR 、TEXT 列上可以创建全文索引。

在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。

从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。

汇总支持情况:

MyISAM引擎

5.6.4版本后的InnoDb引擎

5.7.6之前,全文索引只支持英文全文索引

从MySQL 5.7.6开始支持中文、日文、韩文分词

注意:在数据量较大时候,我们应该先将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的查询速度快。

  1. 用法

  1. My.ini参数配置

ngram_token_size=2 #中文按2个文字切词,进行全文索引

配置完重启

  1. 创建full text索引

ALTER TABLEarticle ADD FULLTEXT INDEX article_fulltext (title,content) with parser ngram;

或者

CREATE FULLTEXTINDEX idx ON table_name(`columns`) with parser ngram;

说明:

-(title,content)表示在title和content两列上加联合索引,如果有多列,用","分隔即可;

- 创建索引语句最后一定要加上with parser ngram

  1. ngram解析器

如果要支持中文分词进行中文全文检索,在创建索引时必须用ngram解析器。

ngram解析器简单说明

内置的MySQL全文解析器使用空格确定单词的开头和结尾。

从版本5.7.6开始,MySQL包含ngram全文解析器作为内置服务器插件,要使用ngram解析器,需要在创建full text索引时加上 with parser ngram 。

根据ngram_token_size参数,ngram按参数值对搜索词进行分词。

  1. 查询

mysql全文搜索有三种模式:

  1. 自然语言查找

这是mysql默认的全文搜索方式

SELECT * FROM article WHERE MATCH(title,content) AGAINST ('查询字符串');

或者显式声明使用自然语言搜索方式

SELECT * FROM articles

WHERE MATCH (title,body)

AGAINST ('database' INNATURAL LANGUAGE MODE);

由于自然语言搜索方式是默认模式,所以可以省略声明模式的“IN NATURALLANGUAGE MODE”部分。

自然语言搜索模式的么特点:

1.忽略停词(stopword),英语中频繁出现的and/or/to等词被认为是没有实际搜索的意义,搜索这些不会获得任何结果。

2.如果某个词在数据集中频繁出现的几率超过了50%,也会被认为是停词,所以如果数据库中只有一行数据,不管你怎么全文搜索都不能获得结果。

3.搜索结果都具有一个相关度的数据,返回结果自动按相关度由高到低排列。

4.只针对独立的单词进行检索,而不考虑单词的局部匹配,如搜索box时,就不会将boxing作为检索目标。

  1. 布尔查找。

这种查找方式的特点是没有自然查找模式中的50%规则,即便有词语在数据集中频繁出现的几率超过50%,也会被作为搜索目标进行检索并返回结果,而且检索时单词的局部匹配也会被作为目标进行检索。sql示例select id,title FROM post WHERE MATCH(content) AGAINST ('searchkeyword' IN BOOLEAN MODE)

  1. 带子查询扩展的自然语言查找

select id,title FROM post WHERE MATCH(content) AGAINST ('searchkeyword' IN BOOLEAN MODE WITH EXPANSION)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/908350
推荐阅读
相关标签
  

闽ICP备14008679号