资讯专栏INFORMATION COLUMN

MySQL如何创建全文索引

社区管理员 / 498人阅读

一、MySQL全文索引介绍

MySQL全文索引功能,分为三种:自然语言全文搜索、布尔全文搜索、具有查询扩展的全文搜索。业务生产环境中,不建议使用MySQL进行文本检索类业务的开发。针对大数据检索场景,建议使用更加专业的Elasticsearch技术栈解决方案。

  • MySQL的全文索引是FULLTEXT类型的索引。 

  • 全文索引只能用于InnoDB或MyISAM表,并且只能用于CHAR、VARCHAR或TEXT列。 

  • MySQL提供了一个内置的全文ngram解析器,支持中文、日语和韩语(CJK),以及一个可安装的日语MeCab全文解析器插件。 (5.7新增)

  • FULLTEXT索引定义可以在创建表时在CREATE TABLE语句中给出,或者稍后使用ALTER TABLE或CREATE index添加。 

  • 对于大型数据集,将数据加载到没有FULLTEXT索引的表中,然后再创建索引,要比将数据加载到已有FULLTEXT索引的表中快得多。 

官网介绍:MySQL5.7   MySQL5.6

二、操作演示之自然语言全文搜索

2.1 准备表结构

mysql> create database starcto;
Query OK, 1 row affected (0.00 sec)

mysql> use starcto;
Database changed

# 创建articles表
CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
) ENGINE=InnoDB;

2.2 插入测试数据

INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial, we show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');

mysql> select * from articles;
+----+-----------------------+------------------------------------------+
| id | title                 | body                                     |
+----+-----------------------+------------------------------------------+
|  1 | MySQL Tutorial        | DBMS stands for DataBase ...             |
|  2 | How To Use MySQL Well | After you went through a ...             |
|  3 | Optimizing MySQL      | In this tutorial, we show ...            |
|  4 | 1001 MySQL Tricks     | 1. Never run mysqld as root. 2. ...      |
|  5 | MySQL vs. YourSQL     | In the following database comparison ... |
|  6 | MySQL Security        | When configured properly, MySQL ...      |
+----+-----------------------+------------------------------------------+
6 rows in set (0.01 sec)

2.3 查询测试

mysql> SELECT * FROM articles
    -> WHERE MATCH (title,body)
    -> AGAINST ('database' IN NATURAL LANGUAGE MODE);
+----+-------------------+------------------------------------------+
| id | title             | body                                     |
+----+-------------------+------------------------------------------+
|  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)

2.4 查询相关度算分

mysql> SELECT id, body, MATCH (title,body)
    -> AGAINST ('Security implications of running MySQL as root'
    -> IN NATURAL LANGUAGE MODE) AS score
    -> FROM articles
    -> WHERE MATCH (title,body) 
    -> AGAINST('Security implications of running MySQL as root'
    -> IN NATURAL LANGUAGE MODE);
+----+------------------------------------------+----------------------------+
| id | body                                     | score                      |
+----+------------------------------------------+----------------------------+
|  4 | 1. Never run mysqld as root. 2. ...      |         0.6055193543434143 |
|  6 | When configured properly, MySQL ...      |         0.6055193543434143 |
|  1 | DBMS stands for DataBase ...             | 0.000000001885928302414186 |
|  2 | After you went through a ...             | 0.000000001885928302414186 |
|  3 | In this tutorial, we show ...            | 0.000000001885928302414186 |
|  5 | In the following database comparison ... | 0.000000001885928302414186 |
+----+------------------------------------------+----------------------------+
6 rows in set (0.00 sec)

注:搜索的相关性算分,描述了一个文档和查询语句匹配的程度。打分的本质是排序,需要把最符合用户需求的文档排在前面。Elasticsearch在搜索相关性算分方面非常强大。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128115.html

相关文章

  • PHP面试MySQL数据库的面试题

    摘要:自己整理了一篇什么是数据库三级封锁协议的文章,关注公众号琉忆编程库,回复锁,我发给你。以下内容部分来自程序员面试笔试宝典和程序员面试笔试真题解析如需转载请注明出处。 你好,是我琉忆,PHP程序员面试笔试系列图书的作者。 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识周三:PHP面试MySQL数据库的索引周五:PHP面试MySQL数...

    awokezhou 评论0 收藏0
  • PHP面试MySQL数据库的面试题

    摘要:自己整理了一篇什么是数据库三级封锁协议的文章,关注公众号琉忆编程库,回复锁,我发给你。以下内容部分来自程序员面试笔试宝典和程序员面试笔试真题解析如需转载请注明出处。 你好,是我琉忆,PHP程序员面试笔试系列图书的作者。 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识周三:PHP面试MySQL数据库的索引周五:PHP面试MySQL数...

    djfml 评论0 收藏0
  • MySQL - 索引详解

    摘要:索引是用来快速检索出具有特定值的记录。全文索引可以在或者类型的列上创建,中只有存储引擎支持全文索引设计原则索引设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍,高效的索引对于获得良好的性能非常重要。 索引是用来快速检索出具有特定值的记录。如果没有索引,数据库就必须从第一条记录开始进行全表扫描,直到找出相关的行。数据越多,检索的代价就越高,检索时如果表的列存在索引,那么MyS...

    crossoverJie 评论0 收藏0
  • MySQL索引专题一 认识索引

    摘要:中间表示对列进行哈希索引,计算出哈希值。哈希索引只有两种引擎支持。哈希索引性能高,适用于特殊场合。唯一索引数据列不允许重复,允许为值,一个表允许多个列创建唯一索引。普通索引基本的索引类型,没有唯一性的限制,允许为值。 关于这个专题 想写MySQL的索引专题是源于之前自己在学习MySQL索引时痛苦的经历,你在网上搜索关于MySQL的索引的文章,大多是支离破碎,没有系统性的对知识点的罗列堆...

    linkFly 评论0 收藏0
  • 项目中常用的19条MySQL优化

    摘要:那如何查询如下图所示,虽然给字段添加了索引,但在结果果并没有使用那么如何解决这个问题呢,答案使用全文索引在我们查询中经常会用到。创建全文索引的语法是使用全文索引的语句是注意在需要创建全文索引之前,请联系确定能否创建。 在写文章之前,首先感谢 飞友科技 陆老师提供的文档。。 声明一下:下面的优化方案都是基于 Mysql-索引-BTree类型 的 一、EXPLAIN 做MySQL优化,...

    荆兆峰 评论0 收藏0
  • MySQL学习笔记】 MySQL 建立索引

    摘要:一索引的分类普通索引唯一索引全文索引使用参数可以设置为全文索引。三创建表时建立索引创建普通索引查看表结构可以使语句查看索引是否被使用创建唯一索引创建全文索引全文索引只能在,或者类型的字段上。而且,只有储存引擎支持全文索引。 一、索引的分类 1、普通索引 2、唯一索引 3、全文索引 使用FULLTEXT参数可以设置为全文索引。全文索引只能创建在char,varchar或者 text 类型...

    yanest 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<