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

来源:互联网 发布:网络用语2017最新数字 编辑:程序博客网 时间:2024/06/06 09:30
提供关于如下内容细节:
要匹配的词
要排斥的词(如果某行包含这个词,则不返回该行,即使它包含其他指定的词也是如此)
排列提示(指定某些词比其他词更重要,更重要的词等级更高)
表达式分组
另外一些内容

即使没有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
0 0
原创粉丝点击