`
kidiaoer
  • 浏览: 825467 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

如何在MySQL中获得更好的全文搜索结果

阅读更多
如何在MySQL中获得更好的全文搜索结果


很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录。在后台,这些程序使用在一个SELECT查询中的 LIKE语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候。

MySQL针对这一问题提供了一种基于内建的全文查找方式的解决方案。在此,开发者只需要简单地标记出需要全文查找的字段,然后使用特殊的 MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索,因为 MySQL使用自然语言来智能地对结果评级,以去掉不相关的项目。

这篇文章将向您讲述在MySQL中如何进行全文搜索。

1、设置基本表格

从创建例子表格开始,使用以下的SQL命令:

mysql> CREATE TABLE reviews (id INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT, data TEXT);

以上命令创建了一个简单的音乐专集资料库(主要是整段的文字),然后向这个表格中添加一些记录:

mysql> INSERT INTO `reviews` (`id`, `data`) VALUES

(1, 'Gingerboy has a new single out called Throwing Rocks. It's great!');

mysql> INSERT INTO `reviews` (`id`, `data`) VALUES

(2, 'Hello all, I really like the new Madonna single.

One of the hottest tracks currently playing...I've been listening to it all day');

mysql> INSERT INTO `reviews` (`id`, `data`)

VALUES (3, 'Have you heard the new band Hotter Than Hell?

They have five members and they burn their instruments when they play in concerts.

These guys totally rock! Like, awesome, dude!');

验证数据的正确录入:

mysql> SELECT * FROM reviews;

+----+--------------------------------------------+

| id | data                                       |

+----+--------------------------------------------+

|  1 | Gingerboy has a new single out called ...  |

|  2 | Hello all, I really like the new Madon ... |

|  3 | Have you heard the new band Hotter Than... |

+----+--------------------------------------------+

3 rows in set (0.00 sec)

2、定义全文搜索字段

接下来,定义您要作为全文搜索索引的字段

mysql> ALTER TABLE reviews ADD FULLTEXT INDEX (data);

Query OK, 3 rows affected (0.21 sec)

Records: 3  Duplicates: 0  Warnings: 0

使用SHOW INDEXES命令来检查索引已经被添加了:

mysql> SHOW INDEXES FROM reviews;

+---------+---------------+--------+------+------------+---------+

| Table   | Column_name   | Packed | Null | Index_type | Comment |

----------+---------------+--------+------+------------+---------+

| reviews |  id           | NULL   |      | BTREE      |         |

| reviews |  data         | NULL   | YES  | FULLTEXT   |         |

+---------+---------------+--------+------+------------+---------+

2 rows in set (0.01 sec)

3、运行全文搜索

当您拥有了数据和索引,就可以使用MySQL的全文搜索了,最简单的全文搜索方式是带有MATCH...AGAINST语句的SELECT查询,以下是一个简单的例子,可以来查找含有单词“single”的记录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('single');+----+

| id |

+----+

|  1 |

|  2 |

+----+

2 rows in set (0.00 sec)

在此,MATCH()将作为参数传递给它的字段中的文字与传递给AGAINST()的参数进行比较,如果有匹配的,那就按照正常的方式返回。注意您可以传递不止一个字段用MATCH()来查看­-只需用逗号来分割字段列表。

当MySQL收到了一个全文搜索的请求,它就在内部对每个记录进行评分,不匹配的记录得分为零,而“更相关”的记录会得到比“不太相关”的记录相对更高的分数。相关性是由MySQL的一系列区分标准来决定的,查看MySQL的用户手册可以得到更多的信息。

想看到每个记录的评分如何,只需要返回MATCH()方法作为结果集的一部分,如下所示:

mysql> SELECT id, MATCH (data) AGAINST ('rock') FROM reviews;

+----+-------------------------------+

| id | MATCH (data) AGAINST ('rock') |

+----+-------------------------------+

|  1 |                             0 |

|  2 |                             0 |

|  3 |               1.3862514533815 |

+----+-------------------------------+

3 rows in set (0.00 sec)

4、使用逻辑搜索修饰符(Boolean search modifiers)

您还可以使用逻辑搜索修饰符来进行更精确的搜索,这通过在AGAINST语句中添加特殊的IN BOOLEAN MODE修饰符来实现,在以下的例子中,将查找含有单词“single”但是没有“Madonna”的记录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('+single -madonna' IN BOOLEAN MODE);

+----+

| id |

+----+

|  1 |

+----+

1 row in set (0.00 sec)

这一搜索特性通常用于搜索单词片断(而不是完整的词语),这可以通过在IN BOOLEAN MODE语句中的*(星号)操作符来实现,以下的例子展示了如何查找单词中含有“hot”的记录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hot*' IN BOOLEAN MODE);+----+

| id |

+----+

|  3 |

|  2 |

+----+

2 rows in set (0.00 sec)

您还可以使用这种方法来查找至少一个传递到AGAINST的参数中,以下的例子查找了至少包含单词“hell”和“rocks”中的一个的记录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hell rocks' IN BOOLEAN MODE);

+----+

| id |

+----+

|  1 |

|  3 |

+----+

2 rows in set (0.00 sec)

以上的这些例子演示了相对于传统的SELECT...LIKE语句,进行全文搜索的更有效的方法,当您下一次需要编写MySQL数据库搜索界面的时候,您可以尝试这一方法。

责任编辑:张琎

查看本文的国际来源
分享到:
评论

相关推荐

    在MySQL中获得更好的全文搜索结果

    者只需要简单地标记出需要全文查找的字段,然后使用特殊的MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索 引来优化搜索),而且实现了更高质量的搜索,因为MySQL使用自然语言来...

    在MySQL中获得更好的搜索结果

    MySQL提供了一种内置的全文搜索功能,通过在需要搜索的字段上创建全文索引,可以显著提高查询速度并提供更准确的搜索结果。 首先,要实现全文搜索,你需要在相应的表中创建一个全文索引。在例子中,我们创建了一个...

    mysql中文使用手册

    - 指的是 MySQL 能够很好地处理千年虫问题,确保日期相关的数据处理正确无误。 - **1.7 SQL 一般信息和教程** - 包括 SQL 语言的基础知识、查询语句的编写方法等。 - **1.8 有用的 MySQL 相关链接** - 提供官方...

    mysql必知必会中文版(高清PDF)

    此外,新术语的清晰定义和对关键代码的示例,使读者可以更好地理解概念,并将其应用于实际情况。 《MySQL必知必会中文版(高清PDF)》的出版,填补了原有《SQL必知必会》一书的空白。前一本书虽然为读者提供了基础...

    mysql8.1.0msi安装包.rar

    5. **更好的备份与恢复**:MySQL 8.1.0可能提供了更方便的备份工具和恢复选项,以确保数据的安全性和完整性。 6. **高可用性与复制**:MySQL的复制功能允许数据在多个服务器之间同步,提高系统的可用性和容错性。...

    mysql5.5 for windows

    2. **Full-Text Search优化**:MySQL 5.5改进了全文本搜索功能,引入了INFORMATION_SCHEMA全文索引统计,支持对多个列进行全文索引,并允许在查询中使用自然语言模式。 3. **分区表**:在MySQL 5.5中,分区表功能...

    mysql 搜索之简单应用

    如何在MySQL中获得更好的全文搜索结果 作者: Techrepublic.com.com 2006-04-03 11:14:53  很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录。在后台,...

    mysql5.5安装版本

    在这个版本中,MySQL致力于提高数据处理速度、稳定性以及安全性,使其更适合大规模的企业级应用。 一、安装过程 安装MySQL 5.5通常包括以下几个步骤: 1. 下载:可以从MySQL官方网站获取适用于不同操作系统的...

    mysql数据库my.cnf配置文件

    #MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中, # 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户...

    面向海量天文数据的分布式MySQL锥形检索研究.pdf

    在当今的天文科学领域,随着大型天文观测装置的性能不断...未来,随着数据量的不断增长和新的存储技术的发展,分布式MySQL锥形检索等研究领域将会继续深化,更好地服务于天文科学以及其它需要处理海量数据的科研领域。

    win版64位mysql5.7安装包 winx64mysql-5.7.19 .zip

    MySQL是世界上最受欢迎的开源数据库系统之一,特别是在Web应用程序中。5.7版本是MySQL的一个重要里程碑,它带来了许多性能改进和新...确保在使用过程中定期备份数据,并保持MySQL的更新,以获得最新的安全补丁和功能。

    MySQL存储引擎简介

    例如,在5.5版本之后,InnoDB的全文索引支持就得到了极大的改进,从而进一步增强了其在全文搜索场景中的竞争力。无论选择哪一种存储引擎,最终的目标都是为了获得最佳的性能、稳定性和可靠性,以满足不同应用的需求...

    mysql driver

    当前推荐使用更新的版本,如8.x系列,以获得更好的性能、安全性和新特性支持。 在实际开发中,为了提高代码的可维护性和可读性,通常会使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,这些框架...

    mysql和oracle连接驱动jar包

    然而,`ojdbc14.jar`是一个较老的版本,对于Oracle 12c及以上版本的数据库,建议使用更高版本的驱动,如ojdbc8.jar,以获得更好的功能支持和性能优化。 在Solr 6.6.0中,作为流行的全文搜索引擎,它允许用户配置...

    mysql-5.5.32.tar.gz

    7. **更好的并行查询执行**:MySQL 5.5改进了查询优化器,能够更好地并行执行查询,尤其是在多核CPU环境中。 8. **安全性和加密**:MySQL 5.5增强了安全性,包括更强大的认证机制,如使用SHA256密码插件,以及对SSL...

    mysql-5.5.60源码安装包

    XtraDB 是 Percona Server 的一个增强版 InnoDB 存储引擎,它在 MySQL 的 InnoDB 基础上进行了优化,旨在提供更好的性能、可扩展性和可靠性。如果你需要使用 XtraDB,源码安装是必要的,因为二进制分发版通常不包含...

    MySQL for Python 英文版

    "MySQL for Python" 是一本专门探讨如何在Python环境中有效利用MySQL的资源,旨在帮助Python开发者更好地理解和使用MySQL。 首先,我们要理解Python中的MySQL连接。Python提供了多种库来连接MySQL数据库,如`mysql-...

    c#连mysql(2.0)

    在.NET环境中,C#语言与MySQL数据库的交互主要依赖于特定的数据提供者,例如MySQL .NET...不过,考虑到旧版本的兼容性和安全性问题,建议升级到较新的MySQL .NET Connector版本,例如8.0,以获得更好的性能和安全特性。

    MySql5.0安装指南

    3. **性能优化**:根据实际情况调整MySQL的配置文件(`my.ini`),以获得更好的性能表现。 通过以上步骤,可以顺利完成MySQL 5.0的安装及基本配置,并为进一步的应用开发和数据库管理奠定坚实的基础。

Global site tag (gtag.js) - Google Analytics