一个SELECT查询中的LIKE语句来执行这种查询,尽管这种方法可行,
但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候。
-------------------
上面这句话 我是在网上看到的, 说得挺有道理的, mysql 本身提供了一种叫做全文搜索的技术吧,
不过这好像从后来的版本才有的, 比较旧的版本不支持,不过那是很早期的版本了,
现在大家使用的版本 应该都支持的。我现在使用 mysql6.0.4 来演示
全文搜索 比起 索引 我觉得更加全面, 索引只对某一个字段,然后在查询时候使用 like 配合。
全文搜索它可以设置多个字段进行搜索,可以说是比起 select .... like 高级吧。
好了, 既然 全文搜索 有这样的优点,下面我们来看看 是否真的如此。
下面提供的测试例子,是 mysql 手册上面的一个例子
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
上面这是创建表的 mysql 语句, 其中最后一句 FULLTEXT (title,body)
就是为 title 和 body 创建一个 全文搜索,也就是 以后 方便搜索 标题 和
标题正文的内容。复制语句上去 就成功创建一张表了。
查看一下 全文搜索 是否被创建, 下面语句作用是:查看表的 主键, 索引, 全文搜索
show indexes from 表名
mysql> show indexes from articles;
+----------+------------+----------+--------------+-------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name |
+----------+------------+----------+--------------+-------------+
| articles | 0 | PRIMARY | 1 | id |
| articles | 1 | title | 1 | title |
| articles | 1 | title | 2 | body |
+----------+------------+----------+--------------+-------------+
3 rows in set (0.01 sec)
可以看到 成功创建了, Key_name名字叫做 title , 它的字段列名Column_name是 title 和 body
=================
下面为 表 添加数据内容, 好让我们进行测试。
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 will 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 will 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.00 sec)
添加好数据库, 下面我们就使用 全文搜索 提供的 查询语句 进行测试。
=================================================
使用语句的模版如下:
SELECT 表字段 FROM 表名 WHERE MATCH (全文搜索表字段) AGAINST ('搜索字符串');
下面 搜索 title 和 body 包含 database 这个字符串
mysql> SELECT * FROM articles
->
-> WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
MATCH 相当于要找的列, 而 AGAINST 就是要找的内容。
比起 like 有点不一样
而且 match ... against 还提供很多 操作, 对数据 进一步过滤,
一般可以作为 比较精确的搜索,
例如下面的这个例子: 搜索title和body中包含 MySQL ,但是不能有 YourSQL 的结果。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
------------------
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
你会发现 可以看到 这个结果被过滤掉了
fulltext 还提供了 更加多的逻辑搜索,也就是一些 模糊搜索 等等,要求更加高的
匹配字符搜索, 大家可以上 mysql 官方网站查看。
=============================================================
上面 建立全文搜索 是在 建立表的同时建立的, 如果你已经建好表了, 但是想加入
这个功能的话, 可以使用下面语句
mysql> alter table articles add fulltext index(title,body);
--------------------
为了演示,我先把刚才的删除掉
mysql> drop index title on articles;
再查看一下, 已经被删除了。
mysql> show indexes from articles;
再为表添加 fulltext 上去
mysql> alter table articles add fulltext index(title,body);
看到了吧, 这样就通过修改现有的表来添加全文搜索功能, 希望这个教程可以帮你
日后使用到这个搜索功能。
分享到:
相关推荐
1.使用Mysql全文检索fulltext的先决条件 表的类型必须是MyISAM建立全文检索的字段类型必须是char,varchar,text2.建立全文检索先期配置由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个...
主要介绍了mysql全文模糊搜索MATCH AGAINST方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
mysql实现全文检索mysql实现全文检索mysql实现全文检索mysql实现全文检索mysql实现全文检索mysql实现全文检索mysql实现全文检索mysql实现全文检索
在 MySQL 下,在进行中文模糊检索时,经常会返回一些与之不相关的 记录,如查找 "%a%" 时,返回的可能有中文字符,却没有 a 字符存在。 本人以前也曾遇到过类似问题,经详细阅读 MySQL 的 Manual ,发现可以 有一...
MYSQL高性能全文检索介绍-E文版。PDF文件。
对设置 的关键字的全文检索,并且高亮显示
在此开发者只需要简单地标记出需要全文查找的字段,然后使用特殊的MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率,而且实现了更高质量的搜索,因为MySQL使用自然语言来智能地对结果评级,以去掉不相关的...
基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计
Sphinx是一个开源的基于MYSQL的全文检索工具 通过合理的配置 可以提供全文检索服务 本文档介绍了 Sphinx的配置和搭建
一种MySQL数据库全文检索的实现方法.pdf
今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快。但是听他说,数据量不多,客户给的时间非常...
基于MySQL的全文检索系统的研究与应用.pdf
基于Sphinx+MySQL的千万级数据全文检索(搜索引擎) 架构设计,本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构
Solr3.6用DIH组件进行MySQL数据库全文索引部署包 完整的工程部署包 apache-solr-3.6.0.xml 放入apache-tomcat-7.0.27\conf\Catalina\localhost
MySQL实现中文全文检索的解决方案.pdf
(1)支持目前所有主流数据库(例如Access、SQL_server、Oracle、MySQL、DB2等),这些数据库文件都可以被架构成全文检索,HdMap并且支持异构数据库、多数据库,最多可容纳200个任意类型的数据库,但每个数据库须少于...