MySql的全文索引FULLTEXT(Mysql8.0版本)

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用分词技术等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。
全文索引始终发生在整个列上,并且不支持列前缀索引。 

全文索引只能使用 InnoDB或 MyISAM表格,并且只能用于创建CHAR, VARCHAR或 TEXT列。
MySQL提供了一个内置的全文ngram解析器,支持中文,日文和韩文(CJK),以及一个可安装的日文版MeCab全文解析器插件。(解析差异可参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-search-ngram.html)
FULLTEXT索引定义可以在被给予CREATE TABLE的语句中创建表时,或者稍后使用添加 ALTER TABLE或 CREATE INDEX
对于大型数据集,将数据加载到没有FULLTEXT索引的表中,然后在此之后创建索引要快得多,而不是将数据加载到具有现有FULLTEXT索引的表中(先创建表并插入所有数据后再创建全文索引,不要在创建表时就直接创建全文索引)。

创建全文索引后,使用MATCH() ... AGAINST语法执行全文搜索 。 
MATCH()采用逗号分隔的列表来命名要搜索的列。 AGAINST获取要搜索的字符串,以及指示要执行的搜索类型的可选修饰符。搜索字符串必须是在查询评估期间保持不变的字符串值

SELECT * FROM table WHERE MATCH(col1,col2) AGAINST (‘查询字符串’); 

三种类型的全文搜索:

1·自然语言搜索将搜索字符串解释为自然人类语言(自由文本中的短语)中的短语。没有特殊运算符,但双引号(“)字符除外。禁用词列表适用。(禁用词、可参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html#fulltext-stopwords-stopwords-for-myisam-search-indexes)

如果IN NATURAL LANGUAGE MODE给出修饰符或者没有给出修饰符,则全文搜索是自然语言搜索 。有关更多信息,可参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-natural-language.html

2·布尔搜索使用特殊查询语言的规则来解释搜索字符串。该字符串包含要搜索的单词。它还可以包含指定要求的运算符,以便在匹配的行中必须存在或不存在单词,或者它应该比通常更高或更低的权重。搜索索引中省略了某些常用词(停用词),
如果搜索字符串中存在,则不匹配。该IN BOOLEAN MODE修饰符指定一个布尔搜索。有关更多信息,可参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-boolean.html

3·查询扩展搜索是自然语言搜索的修改。搜索字符串用于执行自然语言搜索。然后将搜索返回的最相关行中的单词添加到搜索字符串中,然后再次进行搜索。查询返回第二次搜索中的行。该IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION或WITH QUERY EXPANSION修改指定查询扩展搜索。有关更多信息,可参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-query-expansion.html

你可能感兴趣的:(经验,学习,数据库)