zoukankan      html  css  js  c++  java
  • MySQL全文本搜索

    启用全文本搜索支持

    create table text(
        -> id int not null auto_increment,
        -> texts text null,
        -> primary key(id),
        -> fulltext(texts))engine=myisam;

      fulltext(texts)指示对他进行索引,engine=myisam指示用myisam搜索引擎。最常用的两个引擎是MyISAM和InnoDB

    进行全文本搜索

      match()指定被搜索的列,against指定要使用搜索的表达式。match()中的列要与fulltext指定的相同,若有多个列,必须都列出他们且次序相同。

    select texts from text where match(texts) against('new');
    1. 在索引全文本数据时,短词被忽略且从索引中排除。短词定义为具有3个或3个以下字符的词(可以更改)
    2. mysql带有一个内建的非用词表,这些词在全文本搜索中被忽略,
    3. mysql规定了一条50%规则,如果一个词出现在50%以上的行中,则将它忽略,不使用与in boolean mode
    4. 如果表中的行少于3行,全文本搜索不返回结果(因为每次词或者不出现,或者至少50%出现)
    5. 忽略词中的个单引号,如don‘t变为dont
    6. 不具有次分隔符(包括汉语和日语)的语言不能恰当返回搜索结果

    使用扩展查询

      放宽返回全文本搜索的结果的范围,假如想找到提到anvils的注释,注释中只有一个词包含anvils,还想找出其他相关的所有行,即使不包含anvils。

    1. 进行一个基本的全文本搜索
    2. 检查和匹配的行并选择所有有用的词
    3. 再次进行全文本搜索,不仅使用原来的条件,还是用所有用的词
    select texts from text where match(texts) against('you' with query expansion);

    使用布尔文本搜索

      mysql全文本搜索的另一种形式,提供如下细节内容

    1. 要匹配的词
    2. 要排斥的词(如果某行包含这个词,则不返回该行)
    3. 特别提示词(某些词比其他词更重要,等级更好等)
    4. 表达式分组

    及时创建表时没有指定fulltext也可以使用

    不按等级降序返回

    select note_text from productnotes where match(note_text) against('heavy -rope*' in boolean mode);
    布尔操作符 说明
    + 包含,词必须存在
    - 排除,词必须不出现
    > 包含,而且增加等级值
    < 包含,而且降低等级值
    () 把词组成子表达式(允许这些子表达式作为一个组被包含,排序,排列等)
    ~ 取消一个词的排序值
    * 截断一个词,词尾的通配符
    "" 定义一个短语,匹配整个短语
  • 相关阅读:
    Sass:@error
    Sass @warn
    Sass @debug
    Sass:@at-root
    Sass-@extend
    sass @import 规则
    Opacity函数-transparentize()、 fade-out()函数
    Sass函数:Opacity函数-opacify()、fade-in()函数
    Sass-Opacity函数-rgba()函数
    学习笔记97—matlab 获取矩阵中特定值的坐标
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10341494.html
Copyright © 2011-2022 走看看