MySQL必知必会-16MySQL布尔文本搜索

提供关于如下内容细节:
要匹配的词
要排斥的词(如果某行包含这个词,则不返回该行,即使它包含其他指定的词也是如此)
排列提示(指定某些词比其他词更重要,更重要的词等级更高)
表达式分组
另外一些内容

即使没有FULLTEXT索引也可以使用,但是这是一种非常缓慢的操作
最简单的例子:
   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST ('heavy' IN BOOLEAN MODE);
使用了关键字IN BOOLEAN MODE,但实际上没有制定布尔操作符,虽然例子与没有指定布尔方式的结果相同,但其行为有一个重要的差别。

匹配包含heavy但不包含任意以rope开始的词的行
   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST (
  7. 'heavy -rope*' IN BOOLEAN MODE
  8. );
-rope*明确指示MySQL排除包含rope*(任何以rope开始的词,包括ropes)的行。
-排除一个词,而*是截断操作符(可理解为词尾的一个通配符)

全文本布尔操作符
+    包含,词必须存在
-    排除,词必须不出现
>    包含,而且增加等级值
<    包含,且减少等级指
()    把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~    取消一个词的排序值
*     词尾的通配符
""    定义一个短语(与单个词列表不一样,它匹配整个短语以便包含或排除这个短语)

   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST (
  7. '+rabbit +bait' IN BOOLEAN MODE
  8. );
匹配包含词rabbit和bait的行

   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST (
  7. 'rabbit bait' IN BOOLEAN MODE
  8. );
和上一个例子不同,这里匹配包含rabbit和bait中至少一个词的行。

   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST (
  7. '"rabbit bait"' IN BOOLEAN MODE
  8. );
匹配短语rabbit bait

   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST (
  7. '>rabbit <carrot' IN BOOLEAN MODE
  8. );
匹配rabbit或carrot,增加前者的等级,降低后者的等级。

   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST (
  7. '+safe +(<combination)' IN BOOLEAN MODE
  8. );
匹配次safe和combination,降低后者的等级。

排列而不排序,
在布尔方式中,不按等级制降序排序返回的行。

全文本搜索的使用说明
索引全文数据时,短词被忽略且从索引中排除。何为短语:那些具有3个或3个以下字符的词(如果需要,这个数目可以更改)
MySQL带有一个内建的非用词(stopword)列表,这些词在索引全文本数据时总是被忽略。如果需要,可以覆盖这个列表
许多词出现的频率很高,搜索它们没有用处(返回太多结果)因此MySQL规定了一条50%规则,如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。50%规则不用于IN BOOLEAN MODE
如果表中的行数少于3行,则全文本搜索不返回结果(因为每个词或者不出现,或者只是出现在50%的行中)
忽略词中的单引号。例如don't索引为dont

转载于:https://my.oschina.net/u/3368992/blog/861865

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值