第十八章 全文本搜索

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

  

时间: 2024-12-31 21:32:53

第十八章 全文本搜索的相关文章

数据库9:联结表 高级联结 组合查询 全文本搜索

第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分.   外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系. 好处:供应商信息不重复,不浪费空间和时间,方便日后修改,一个表信息改动不影响另一个表的信息 联结是一种机制,使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行.   创建联结          

第十八章:全文本搜索

@author: Tobin @date: 2019/11/4 16:03:15 MyISAM不支持全文本搜索,InnoDB支持. # 在创建表时启用全文本搜索 CREATE TABLE productnotes ( note_id int NOT NULL AUTO_INCREMENT, prod_id char(10) NOT NULL, note_date datetime NOT NULL note_text text NULL, PRIMARY KEY(note_id), FULLTE

【转】MYSQL入门学习之三:全文本搜索

转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而InnoDB不支持. 2.在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行.这样MySQL可以快速有效地决定哪些词匹配,哪些词不匹配,它们匹配的频率,等等. 二.使用全文本搜索 1.为了进行全文本搜索,必须索引被搜索的列,

全文本搜索

仅在MyISAM引擎中支持全文本搜索 1.创建表时启用全文本搜索 e.g. CREATE TABLE productnotes ( note_id int NOT NULL AUTO_INCREMENT, prod_id char(10) NOT NULL, note_text text NULL, PRIMARY KEY(note_id), FULLTEXT(note_text) )ENGINE=MyISAM 这里FULLTEXT一个列,也可以指定多个列,用逗号隔开 2.索引之后,使用Matc

MySQL数据检索+查询+全文本搜索

[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL数据检索+查询+全文本搜索" 的基础知识: [1]使用子查询 1)查询定义:任何sql 语句都是查询.但此术语一般指 select语句:SQL 还允许创建子查询,即嵌套在其他查询中的查询: 2)利用子查询进行过滤(where子句,in子句) 2.1)可以把一条select语句返回的结果用于另一条select语句的where子句: 3)作为计算字段使用子查询 3.1)

MySQL.MATCH() AGAINST()全文本搜索

SELECT note_text -> FROM productnotes -> WHERE Match(note_text) Against('rabbit'); +----------------------------------------------------------------------------------------------------------------------+ | note_text | +------------------------------

mysql 文本搜索

全文本搜索 MySQL支持几种基本的数据库引擎,但并非所有的引擎都支持全文本搜索.两个最常使用的引擎为MyISAM和InnoDB,前者支持全文本搜索,后者就不支持. 理解全文本搜索 在前面的学习中,我们都知道有两种方式来匹配文本.一种是使用like关键字来进行匹配,另外一种就是使用正则表达式来进行匹配. 虽然使用正则表达式就可以编写查找所需行的足够复杂的匹配模式.但是,这些存在几个重要的限制影响: 1.性能:通配符和正则表达式时尝试匹配表中所有行,而这些搜索极少使用了表索引,因此,相当慢 2.明

第十八章 文本处理流编辑器:sed命令

第十八章 文本处理流编辑器:sed命令 名词解释 sed 是一种流编辑器,它是文本处理常用到的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化多文件的反复操作,编写转换程序等. sed的选项.命令

“全栈2019”Java第二十八章:数组详解(上篇)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第二十八章:数组详解(上篇) 下一章 "全栈2019"Java第二十九章:数组详解(中篇) 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组"