Mysql学习2

来源:互联网 发布:小学生学编程视频教程 编辑:程序博客网 时间:2024/04/20 01:58

1Mysql 全文本搜索使用引擎MyISAM,要进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。在对表列进行适当设计后,Mysql会自动进行所有的索引和重新索引。

在索引之后,SELECT可与Match()Against()一起使用以实际执行索引。Match()指定要搜索的列,Against()指定搜索表达式。例:

输入:mysql> select note_text

                    -> from productnotes

                   -> where match(note_text) against('rabbit');

输出:|note_text|

             | Customer complaint: rabbit has been able to detect trap, food apparently less effective now.|

             | Quantity varies, sold by the sack load.All guaranteed to be bright and orange, and suitable for use as rabbit bait. |

2、查询扩展

      用来设法放宽所返回的全文本搜索结果的范围(关键词 WITH QUERY EXPANSION)

      使用时Mysql对数据和索引进行两遍扫描来完成搜索:

             首先,进行一个基本的全文本搜索,找出搜索条件匹配的所有行;

               其次,Mysql检查这些匹配行并选择所有有用的词。

               再次,Mysql再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词。

       利用查询扩展,能找出可能相关的结果,即使他们并不精确包含所查找的词。

3、布尔文本搜索 (关键词 IN BOOLEAN MODE)

       以布尔方式可以提供如下内容的细节:

       要匹配的词;要排斥的词(如果某行包含这个词,则不返回该行,即使她包含其他指定的词也是这样);排列提示(指定某些词比其他词更重要,更重要的词等级更高);表达式分组等。

 

布尔操作符

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

例:

输入:mysql> select note_text

                     -> from productnotes

                    -> where Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE);

输出:| note_text |

              | Customer complaint:Not heavy enough to generate flying stars around head of victim. If being purchased for dropping, recommend ANV02 or ANV03 instead. |

分析:  -rope*指示Mysql排除包含rope*(任何以rope开始的词,包括ropes)的行。

 

关于全文本搜索的一些重要声明:

     * 在索引全文本数据时,短词被忽略且从索引中排除。短语定义为那些具有3个或3个一下字符的词。

     *Mysql带有一个内建的非用词(stopword)列表,这些词在索引全文数据时总是被忽略。如果需要,可以覆盖这个列表。

     * 许多词出现的频率很高,搜索他们没有用处(返回太多的结果)Mysql规定了一条50%规则,如果一个词出现在50%的行中,则将它作为一个非用词忽略。50%规则不用于INBOOLEAN MODE

     * 如果表中的行数少于3行,则全文搜索不返回结果。

     * 忽略词中的单引号。如,don’t索引为dont

     * 不具有词分隔符的语言不能恰当地返回全文本搜索结果。

     * 仅在MyISAM数据库引擎中支持全文本搜索。

原创粉丝点击