Mysql 简明教程
MySQL - Boolean Full-Text Search
MySQL Boolean Full-Text Search
MySQL 提供了全文搜索功能,支持三种类型的搜索,其中一种是布尔全文搜索。
这个布尔全文搜索可以通过允许使用布尔运算符(例如 (+、-、>、<、* 等)和搜索字符串,对大量的文本数据执行复杂的搜索操作。
与搜索 concepts 的自然语言全文搜索不同,MySQL 中的布尔全文搜索将查找 specific words 。要执行此类搜索,需要在 AGAINST 表达式中包含 IN BOOLEAN MODE 修饰符。
MySQL Boolean Full-Text Search Operators
下表指定了全文搜索布尔运算符 −
Example
首先,让我们使用以下查询创建一个名为 ARTICLES 的表 −
CREATE TABLE ARTICLES (
ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
ARTICLE_TITLE VARCHAR(100),
DESCRIPTION TEXT,
FULLTEXT (ARTICLE_TITLE, DESCRIPTION)
);
在上面的查询中,我们在列 ARTICLE_TITLE 和 DESCRIPTION 上定义了全文索引。现在,让我们将值插入到上面创建的表中 −
INSERT INTO ARTICLES (ARTICLE_TITLE, DESCRIPTION) VALUES
('MySQL Tutorial', 'MySQL is a relational database system that uses SQL to structure data stored'),
('Java Tutorial', 'Java is an object-oriented and platform-independent programming languag'),
('Hadoop Tutorial', 'Hadoop is framework that is used to process large sets of data'),
('Big Data Tutorial', 'Big Data refers to data that has wider variety of data sets in larger numbers'),
('JDBC Tutorial', 'JDBC is a Java based technology used for database connectivity');
ARTICLES 表创建如下 −
现在,让我们执行布尔模式的全文搜索,我们正在搜索包含“数据”一词的行 −
SELECT * FROM ARTICLES
WHERE MATCH (ARTICLE_TITLE, DESCRIPTION)
AGAINST('data' IN BOOLEAN MODE);
Example
在下面的查询中,我们正在搜索包含“数据”但不是“集合”的行 −
SELECT * FROM ARTICLES
WHERE MATCH(ARTICLE_TITLE, DESCRIPTION)
AGAINST('+data -sets' IN BOOLEAN MODE);
Example
在这里,我们正在搜索同时包含“数据”和“集合”这两个词的行 −
SELECT * FROM ARTICLES
WHERE MATCH(ARTICLE_TITLE, DESCRIPTION)
AGAINST('+data +sets' IN BOOLEAN MODE);
Example
在下面的查询中,我们正在搜索包含“集合”但不是“集合”的较高排名的那些行 −
SELECT * FROM ARTICLES
WHERE MATCH(ARTICLE_TITLE, DESCRIPTION)
AGAINST('+data sets' IN BOOLEAN MODE);
Example
使用下面的查询,我们正在搜索包含“数据”一词的行,并在搜索中对包含“教程”一词的行进行较低排名 −
SELECT * FROM ARTICLES
WHERE MATCH(ARTICLE_TITLE, DESCRIPTION)
AGAINST('+data ~sets' IN BOOLEAN MODE);
MySQL Boolean Full-Text Search Features
以下是 MySQL 布尔全文搜索的一些重要功能 −
-
在布尔全文搜索中,MySQL 不按相关性降序自动对行进行排序。
-
InnoDB 表要求 MATCH 表达式的所有列都具有 FULLTEXT 索引才能执行布尔查询。
-
如果我们对 InnoDB 表的搜索查询提供多个布尔运算符,例如“++hello”,MySQL 不支持它们,并且会生成错误。但是,如果我们在 MyISAM 中执行相同的操作,它将忽略额外的运算符并使用最接近搜索词的运算符。
-
在 InnoDB 全文搜索中不支持尾随 (+) 或 (-) 符号。它仅支持前导 + 或 − 符号。
-
如果搜索词是“hello+”或“hello-”,MySQL 会生成错误。除此之外,以下内容也会生成错误“*”、“ - ”。
-
如果单词出现在超过 50% 的行中,MySQL 会在搜索结果中忽略该单词。这称为 50% 阈值。