zoukankan      html  css  js  c++  java
  • 第十八章 全文本搜索

    1.使用like和regexp进行文本的搜索有几个缺点:
    A:性能不高,通配符和正则表达式通常要求mysql尝试匹配表中所有行,由于行数多,这些搜索可能很耗时
    B:使用正则表达式和通配符很难明确空值
    C:虽然基于通配符和正则表达式的搜索提供了非常灵活的效率,但它们都不能提供一种智能化的选择结果
    
    2.为了进行全文本搜索,必须索引被搜索的列,而且随着数据的改变不断重新索引。在索引之后select可与match()和against()一起使用。
    
    3.一般在创建表时启用全文本搜索。create table语句接受fulltext子句如下:
    注意点:不要在导入数据时使用fulltext,而应该首先导入数据,然后定义fulltext,这样效率比较高
    
    4.在索引之后,使用match()指定被搜索的列,against()指定要使用的搜索表达式。
    传递给match的值必须与fulltext中定义的相同,而且若指定多个列,列的顺序也要正确
    全文本搜索的一个重要部分是对结果排序,具有较高等级的行先返回,文中词靠前的行的等级比词靠后的行高
    5.使用扩展查询(with query expansion):
    mysql对数据和索引进行两边扫描来完成搜索,首先找出与搜索条件匹配的所有行,其次mysql检查这些匹配行并选择所有有用的词,然后在进行一次全文本搜索,不仅使用原来的条件,而且还使用所有有用的词
    如上可知,扩展查询增加了返回的行数,但是也返回了一些没用的行
    
    6.布尔文本搜索(in boolean mode)
    以布尔方式可以提供如下内容:
    A:要匹配的词
    B:要排斥的词
    C:排列提示
    D:表达式分组
    E:其他内容
    +: 包含,词必须存在
    -: 排除,词必须不存在
    >: 包含,增加等级
    <: 包含,减少等级
    (): 把词组成表达式
    ~: 取消一个值的排序值
    *: 词尾通配符
    "": 定义一个短语,与单个词的列表不同,它将匹配整个短语

    7.布尔搜索注意点:
    在布尔方式中,不按等级值降序排序返回行,即只排列而不排序
    可以在非fulltext列中进行布尔搜索,但是效率很低
    
    8.全文本搜索说明:
    A:在索引全文本数据时,短词将被从索引中排除。短词定义为具有3个及以下的词(数目可更改)
    B:mysql带有一个内建的非用词列表,这些词在索引中总是被忽略(此表可被覆盖)
    C:如果一个词在行中出现的频率大于百分之50,则将其作为非用词进行忽略。此规则不用于布尔搜索中
    D:仅在myisam数据库引擎中支持全文本搜索
    E:对于汉语不能恰当的返回全文本搜索结果
    F:忽略词中的引号,如don't索引为dont
    

      

  • 相关阅读:
    Vue|提示信息统一处理
    SpringBoot|封装接口实现自动创建job并且自动构建功能
    SpringBoot|自动创建job并且参数化构建
    SpringBoot|持久化常用注解
    SpringBoot|使用mybatis-generator-maven-plugin自动生成代码
    SpringBoot|config.properties通用Mapper配置
    SpringBoot|config.properties通用数据库连接配置
    SpringBoot|数据持久化技术现状
    Debian安装完成后没有无线网络的解决方法
    Debian系统设置terminal快捷键
  • 原文地址:https://www.cnblogs.com/szn409/p/6193871.html
Copyright © 2011-2022 走看看