布尔搜索模式是MySQL中的其他全文搜索形式。它允许根据非常复杂的查询来进行搜索,该查询包括布尔运算符,例如小于(<)或多于(>)运算符,加号(+)和减号( - )符号,子表达(“(”和“) )“),双引号(”“),一个降低价值对结果(〜)和通配符。
让无涯教程了解它的基本示例。假设有一个名为 posts 的表,其中包含以下数据:
以下示例显示有关如何搜索帖子标题的结果,其名称包含"Java"字:
mysql> SELECT id, title FROM posts WHERE MATCH(title, descriptions) AGAINST('Java' IN BOOLEAN MODE);
执行查询将返回包含Java的两个帖子名称:
假设无涯教程想要获取帖子名称包含"mysql"字而且不是包含"java"字的任何其他行的帖子。在这种情况下,可以使用排除布尔运算符( - )以获得所需的输出。请参阅以下查询:
mysql> SELECT id, title FROM posts WHERE MATCH (title, descriptions) AGAINST ('MySQL -Java' IN BOOLEAN MODE);
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);
执行查询,将获得所需的结果:
下面是一个列出每行的相关性值的另一个示例,即使是值为零。无涯教程可以在 where子句
执行查询,将获得所需的结果:
此表显示了全文布尔搜索模式中使用的操作员及其含义:
Operators | Descriptions |
---|---|
+ | 表示搜索字符串的标志必须存在于返回的行中。 |
- | 代表搜索字符串减去标志不能存在于返回的行中。 |
> | 它用于将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);
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)