Mysql 简明教程

在 MySQL 等关系数据库中,全文搜索是一种用于检索可能与搜索关键字不完全匹配的结果集的技术。这种类型的搜索在用于搜索的关键字不与用户期望的结果匹配时非常有用。因此,这种搜索技术旨在关注于提高搜索相关性,以缩小搜索查询与搜索结果之间的准确性差距。因此,搜索结果按与搜索关键字相关性从最高到最低的顺序显示。

全文搜索使用三种类型的搜索模式:

  1. Natural Language Mode

  2. Query Expansion Mode

  3. Boolean Mode

搜索总是由用户使用他们掌握的有限知识进行的。因此,有这样的情况:当搜索关键字太短以执行适当的搜索时。盲目扩展搜索技术就在这种情况下发挥作用。

盲目扩展搜索也称为自动相关性反馈,用于基于与原始关键字密切相关的附加关键字来扩大搜索结果。它使用“WITH QUERY EXPANSION”搜索词组启用。

在以下情况下,按以下步骤执行两次搜索-

Step 1 −首先搜索所有与给定搜索关键字匹配的行。

Step 2 −然后检查获得的行中与原始关键字相关的相关单词。

Step 3 −最后,再次基于这些相关单词(而不是用户指定的原始关键字)搜索这些行。

要在数据库表的全文搜索中执行查询扩展,则必须在 AGAINST() 函数中指定带 QUERY EXPANSION 的 WITH 或带 QUERY EXPANSION 的 IN NATURAL LANGUAGE MODE 搜索修饰符。

Example

让我们在以下示例中了解如何在数据库表中执行查询扩展全文搜索。

为此,我们将首先创建一个名为 DBMS_TUTORIALS 的表,其中包含文章的标题和说明。全文索引应用于文本列 TUTORIAL_TITLE 和 DESCRIPTIONS,如下所示 −

CREATE TABLE DBMS_TUTORIALS(
   TUTORIAL_TITLE VARCHAR(200),
   DESCRIPTIONS TEXT,
   FULLTEXT(TUTORIAL_TITLE, DESCRIPTIONS)
);

现在,让我们使用以下查询将教程的详细信息(例如其标题和说明)插入到此表中 −

INSERT INTO DBMS_TUTORIALS VALUES
('MySQL Tutorial', 'MySQL is an RDBMS that uses SQL to structure the data stored'),
('ORACLE Tutorial', 'ORACLE is an RDBMS that uses SQL to structure the data stored'),
('MySQL Security', 'MySQL Database can store sensitive data, so security is required'),
('MySQL vs MariaDB', 'Comparing two databases...'),
('JDBC Tutorial', 'In this Java-based database connectivity...');

表创建如下 −

在全文搜索中使用查询扩展模式,我们用关键字“RDBMS”搜索与数据相关的文章记录。

SELECT * FROM DBMS_TUTORIALS
WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS)
AGAINST ('RDBMS' WITH QUERY EXPANSION);

Output

获得的输出为 −

IN NATURAL LANGUAGE MODE

在上面获得的结果集中,所有教程记录都与数据库有关,这就是查询基于相关性检索所有记录的原因。

SELECT * FROM DBMS_TUTORIALS
WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS)
AGAINST ('Security' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION);

Output

获得的输出为 −

在此结果集中,即使搜索关键字为“Security”,实际的安全相关教程也只有“MySQL Security”和“JDBC Tutorial”,因此首先检索这些教程。然后,这些记录后跟与数据库相关的记录,作为扩展查询。

Query Expansion Full-Text Search Using Client Program

我们还可以使用客户端程序执行查询扩展全文搜索操作。

Syntax

Example

以下是这些程序 −