MySQL - 布尔全文搜索

MySQL - 布尔全文搜索 首页 / MySQL入门教程 / MySQL - 布尔全文搜索

布尔搜索模式是MySQL中的其他全文搜索形式。它允许根据非常复杂的查询来进行搜索,该查询包括布尔运算符,例如小于(<)或多于(>)运算符,加号(+)和减号( - )符号,子表达(“(”和“) )“),双引号(”“),一个降低价值对结果(〜)和通配符。

让无涯教程了解它的基本示例。假设有一个名为 posts 的表,其中包含以下数据:

MySQL BOOLEAN FULLTEXT SEARCH

以下示例显示有关如何搜索帖子标题的结果,其名称包含"Java"字:

mysql> SELECT id, title FROM posts 
WHERE MATCH(title, descriptions) 
AGAINST('Java' IN BOOLEAN MODE);

执行查询将返回包含Java的两个帖子名称:

MySQL BOOLEAN FULLTEXT SEARCH

假设无涯教程想要获取帖子名称包含"mysql"字而且不是包含"java"字的任何其他行的帖子。在这种情况下,可以使用排除布尔运算符( - )以获得所需的输出。请参阅以下查询:

mysql> SELECT id, title FROM posts 
WHERE MATCH (title, descriptions) 
AGAINST ('MySQL -Java' IN BOOLEAN MODE);

执行查询将返回包含 mysql,而不是 java :

MySQL BOOLEAN FULLTEXT SEARCH

相关性得分

match()函数为表中的每一行分配了相关性值,并将其命令为最高相关性。此值确定如何与搜索项相关。相关性得分始终存在非负浮点数

如果想根据最高相关性检查文本相关性并排序行,可以使用查询如下:

mysql> SELECT title, MATCH (title, descriptions) 
AGAINST ('Java, Workbench' IN BOOLEAN MODE) AS relevance_score 
FROM Posts WHERE MATCH (title, descriptions) 
AGAINST ('Java, Workbench' IN BOOLEAN MODE);

执行查询,将获得所需的结果:

MySQL BOOLEAN FULLTEXT SEARCH

下面是一个列出每行的相关性值的另一个示例,即使是值为零。无涯教程可以在 where子句

执行查询,将获得所需的结果:

MySQL BOOLEAN FULLTEXT SEARCH

全文搜索运算

此表显示了全文布尔搜索模式中使用的操作员及其含义:

OperatorsDescriptions
+表示搜索字符串的标志必须存在于返回的行中。
-代表搜索字符串减去标志不能存在于返回的行中。
>它用于将Word的贡献更改为分配给行的相关性值,>运算符增加相关价值。
<它用于将Word的贡献更改为分配给行的相关性值。<运算符减少相关价值。
*它表示通配符。
~它充当否定运算符,它在标记噪声字时很有用。
""它定义了在双引号(“)字符中括起来的短语。它与包含或排除的整个短语匹配,而不是单个单词。
()括号运算符用于将单词分组为子表达式。
@distance它仅用于InnoDB表,该表测试了两个或多个单词是否在彼此的指定距离内启动。
No operator如果无涯教程既没有用过的加号或减号运算符。

看看各种例子,说明在搜索查询中使用布尔的全文运算符:

1.如果想搜索包含这些单词中至少一个的行: Java tutorial ,可以使用以下语句:

mysql> SELECT id, title FROM posts 
WHERE MATCH(title, descriptions) 
AGAINST('Java tutorial' IN BOOLEAN MODE);

2.如果想搜索包含两个单词的行: java 和 tutorial ,可以使用以下语句:

mysql> SELECT id, title FROM posts 
WHERE MATCH(title, descriptions) 
AGAINST('+Java +tutorial' IN BOOLEAN MODE);

3.如果想搜索包含Java的行,可以使用以下语句:

mysql> SELECT id, title FROM posts 
WHERE MATCH(title, descriptions) 
AGAINST('+Java tutorial' IN BOOLEAN MODE);

4.如果想搜索包含Java,不包含tutorial的行,可以使用以下语句:

mysql> SELECT id, title FROM posts 
WHERE MATCH(title, descriptions) 
AGAINST('+Java ~tutorial' IN BOOLEAN MODE);

5.如果无涯教程想找到包含以"My"开始的单词的行,例如"mysql",使用以下查询:

mysql> SELECT id, title FROM posts 
WHERE MATCH(title, descriptions) 
AGAINST('My*' IN BOOLEAN MODE);

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

左耳听风 -〔陈皓〕

趣谈网络协议 -〔刘超〕

Nginx核心知识150讲 -〔陶辉〕

玩转webpack -〔程柳锋〕

设计模式之美 -〔王争〕

接口测试入门课 -〔陈磊〕

深度学习推荐系统实战 -〔王喆〕

如何读懂一首诗 -〔王天博〕

AI大模型之美 -〔徐文浩〕

好记忆不如烂笔头。留下您的足迹吧 :)