mysql boolean 检索_MySQL全文搜索:布尔模式

MySQL全文搜索的布尔模式允许精确控制多单词查询。在布尔模式中,'50%规则'失效,查询结果不按相关性排序。通过加号和减号修饰符,可以指定单词必须出现或不得出现。例如,'+bell -candle'会找到包含'bell'但不包含'candle'的行。星号(*)可用作通配符,如'soft*'匹配所有以'soft'开头的词。布尔模式也会忽略休止单词。
摘要由CSDN通过智能技术生成

全文搜索的布尔模式可以让我们控制多单词搜索操作中的许多细节。要想进行这种模式的搜索,需要在AGAINST()函数里在搜索字符串的后面加上IN BOOLEAN MODE短语。布尔模式的全文搜索有以下特点。

"50%规则"不再起作用,即使是在超过一半的数据行里出现过的单词也可以被这种搜索匹配出来。

查询结果不再按照相关程度排序。

在搜索一个短语时,你可以要求所有单词必须按照某种特定的顺序出现。如果是搜索一个短语,需要把构成该短语的所有单词用双引号括起来;如果数据行包含的单词按照给定的顺序排列,才被认为是一个匹配。

mysql> SELECT * FROM apothegm

-> WHERE MATCH(attribution, phrase)

-> AGAINST('"bell book and candle"' IN BOOLEAN MODE);

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

| attribution         | phrase                 |

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

| Miguel de Cervantes | Bell, book, and candle |

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

布尔模式的全文搜索还可以在没被包括在FULLTEXT索引里的数据列上进行,但这要比搜索有FULLTEXT索引的数据列慢很多。

在进行布尔搜索时,还可以给搜索字符串里的单词加上一些修饰符。在单词的前面加上一个加号表示该单词必须出现在匹配数据行里,而加上一个减号表示该单词不得出现在匹配数据行里。比如说,搜索字符串'bell'匹配包含"bell"的数据行,而在布尔模式里,搜索字符串'+bell -candle'只匹配包含单词"bell"、不包含单词"candle"的数据行:

mysql> SELECT * FROM apothegm

-> WHERE MATCH(attribution, phrase)

-> AGAINST('bell');

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

| attribution           | phrase                             |

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

| Alexander Graham Bell | Mr. Watson, come here. I want you! |

| Miguel de Cervantes   | Bell, book, and candle             |

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

mysql> SELECT * FROM apothegm

-> WHERE MATCH(attribution, phrase)

-> AGAINST('+bell -candle' IN BOOLEAN MODE);

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

| attribution           | phrase                             |

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

| Alexander Graham Bell | Mr. Watson, come here. I want you! |

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

后缀的星号"*"将被解释为一个通配符,带星号后缀的搜索单词将匹配以它开头的所有单词。比如说,'soft*'将匹配"soft"、"softly"、"softness"等:

mysql> SELECT * FROM apothegm WHERE MATCH(phrase)

-> AGAINST('soft*' IN BOOLEAN MODE);

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

| attribution         | phrase                                             |

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

| Proverbs 15:1       | A soft answer turneth away wrath                   |

| William Shakespeare | But, soft! what light through yonder window breaks?|

| Theodore Roosevelt  | Speak softly and carry a big stick                 |

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

注意,星号通配符不能用来匹配比最小索引单词长度更短的单词。

在附录C里,你可以在介绍MATCH操作符的部分查到全部的布尔模式修饰符。

和自然语言模式的全文搜索情况相似,布尔模式的全文搜索也将忽略所有的休止单词,就算是把它们标为"必须出现"也是如此。比如说,搜索字符串'+Alexander +the +great'将找出包含 "Alexander"和"great"的数据行, "the"会因为它是一个休止单词而被忽略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值