mysql 二元分词_MySQL 中文分词原理

一,首先我们来了解一下其他几个知识点:

1. Mysql的索引意义?

索引是加快访问表内容的基本手段,尤其是在涉及多个表的关联查询里。当然,索引可以加快检索速度,但是它也同时降低了索引列的插入,删除和更新值的速度。

换通俗的话来讲:

mysql中的索引就是一个特殊的平衡二叉树,当在平衡二叉树中搜索某一条值的时候,上亿条的数据可以在十多次内可以塞选出来。

所以,每个数据表里面有多少个索引就有多少个对应的索引表。

当然,一个表里面的索引越多写入速度会越慢,但读去速度会越。

mysql的索引类型:

唯一索引。

常规索引。

fulltext索引

spatial索引

hash索引

2. 什么fulltext索引?

fulltext索引也叫做全文本索引,MySQL具备全文搜索的能力,它可以让你在不使用模板匹配操作的情况下进行单词或短语的查找。

ps:(个人理解)

1. mysql的全文本索引是针对与英文文本的索引(毕竟是别人国外人开发的mysql),我们知道在一篇英文文章中可以发现一个特点,每个单词与每个单词都是以空格隔开的。如果我们把每个单词看做一个数据,按照单词的大小来进行前后排列,也可以形成一个二叉树。

2. 有规律可循,有二叉树,我们就可以对其快速搜索,并可以对应进行封装成索引,也就是我们所说的全文本索引————fulltext索引。

3. 注意————fulltext索引只能搜索英文。

二,使用FULLTEXT搜索

1. 全文搜索的特性(重点)

全文搜索基于fulltext索引。fulltext索引,只能出现在char varchar text这几种类型的表字段里面。

全文搜索会忽略那些常见词:常见词,指的是至少一半的行里都出现过,超过50%的词,都为常见词;

有些为内建的常用单词:也叫停用词,比如:the/after,other

比较短的单词也会被停用。

单词的定义:它们是由字母,数字,撇号和下划线,构造而成的字符串。(英文单词完全符合,但是中文不行)

可以为一个字段(列)创建fulltext索引,也可以为多个字段(列)创建一个fulltext索引。

注意:一个索引是一个平衡二叉树。

1. 如果给a字段建立一个索引,当进行全文本搜索时候,只要命中a字段即可完成搜索。

2. 如果为a和b两个字段同时建立一个fulltext索引时,它的平衡二叉树里面是包括这两个字段的所有数据。如果此刻,我们只想对a字段进行全文本搜索,这个fulltext是做不到的,只能另外在建立一个a字段的fulltext索引。

2全文搜索分类

自然语言搜索(默认类型):mysql会把搜索的字符串解析成一系列的单词,然后去搜索出包含这些单词的那些行;

布尔模式搜索:可以为搜索的字符串里加修饰词,用于表明某些特定的要求,比如匹配行里必须出现某些单词,而且必须按照规定顺序出现,或者不能存在某些单词等。

查询扩展搜索:这种搜索分为两个阶段。第一阶段,是自然语言搜素。第二阶段,则先把原来的搜索字符串,与第一阶段的搜索里高度匹配的那些行,连接到一起,在一次进行全文本搜索。

3 mysql语法:

建立索引语法:

建表

create table article (title varchar(40),contain text ) engine = myisam;

建立三个索引

alter table article

add fulltext (title),

add fulltext (contain),

add fulltext (title, contain);

4. 自然语言索引

命中title这个fulltext索引,并搜索包含“hello”这个单词的所有行。

select * from article where match(title) against("hello");

命中title和contain两列的这个fulltext索引,并搜索包含“word”这个单词的所有行。

select * from article where match(title, contain) against("word");

输出match()这个mysql函数的返回值——搜索单词的权重。

select title, match(title) against("word") as relevance from article ;

注意:其实完整的自然语言搜索需要添加IN NATURAL LANGUAGE MODE,如下所示

select * from article where match(title) against("hello" IN NATURAL LANGUAGE MODE);

5. 布尔模式索引

1. 特点

50%一样的规则:不生效了

查询结果不再按照相关程度排序

也可以对非fulltext索引列进行搜索,只是速度相比,有fulltext的速度要慢

2. 使用的方式

基本方式:要在mathc后面加 in boolean mode,(不加说明,默认使用自然排序 in natural language mode)

select * from apothegm where match(phrase) againts('hard' in boolean mode);

按单词出现顺序检索,把对应单词用双引号引起来;

select * from apothegm where match(phrase) againts('“bell book and candle”' in boolean mode);

可以搜索必须出现,必须不出现,分别用+ 和 -标示:

select * from apothegm where match(phrase) againts('+bell -candle' in boolean mode);

可以用*作为通配符,标示以什么开头(前缀)。但是还是必须遵守,单词不能过短的约定。

6. 查询扩展全文搜索(略)

三,中文分词

1. 中文分词的作用?

把一段中文,像一篇英文文章一样,一个个的单词(中文文章叫做词语)使用空格隔开,然后用编码工具把每个中文词语编译成英文字符乱码,接着,每个英文乱码之间也用空格间隔,这样就成功的把一篇中文翻译成看不懂的英文文章了,我们就可以使用fulltext索引,在这篇看不懂的英文文章中进行全文本搜素。

ps——注意:

1. 中文分词的主要作用就,把一段中文,切分成一个个的中文词语。

2. 然后进过unicode编码,把每个单词编码为英文字符乱码。

3.这个英文乱码单词是符合fulltext索引单词定义的。

2. 中文分词的介绍

中文分词的原理是它有一本自己的字典。一般都有组件,执行某个方法就可以进行中文分词啦。

大家可以参考github的结巴分词

————————————————

原文链接:https://www.blog8090.com/mysqlzhong-wen-fen-ci-yuan-li/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 元类 type_Python 使用元类type创建类对象常见应用详解

本文实例讲述了Python 使用元类type创建类对象。分享给大家供大家参考,具体如下:type("123") 可以查看变量的类型;同时 type("类名",(父类),{类属性:值,类属性2:值}) 可以创建一个类。在Python中不建议一个函数具有不同的功能(重载)…

使用AWS Elastic Beanstalk轻松进行Spring Boot部署

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 几乎所有应用程序都依赖于身份验证。 开发人员以及雇用他们的公司都想确认谁在发出请求&…

mysql报错乱码_连接mysql服务器报错时,出现乱码

页头用了header(content-type:text/html;charsetutf-8);try{$this->dbonew PDO($dsn,$dbuser,$dbpassword);}catch(Exception $e){echo $e->getMessage();}连接失败时会报错,但是乱码,IE下编码查看是UTF-8,但是是乱码,如果选…

自学python条件_自学Python2.8-条件(if、if...else)

自学Python2.8-条件(if、if...else)1.if 判断语句if语句是用来进行判断的,其使用格式如下:if 要判断的条件:条件成立时,要做的事情当“判断条件”成立(True)时,才执行语句;反之,则不执行。执行语句可以为多…

mac lion 安装 mysql_mac osx下安装mysql

操作系统版本:mac osx 10.11mysql版本:官网下载dmg v5.6.33 https://www.mysql.com/安装步骤1.双击dmg安装2.开启mysql服务系统偏好设置-底部-mysql-打开服务这个时候还不能使用mysql命令,需要配置mysql命令的路径。3.配置环境变量mysql的路…

python爬虫实训日志_Python学习学习日志——爬虫《第一篇》(BeautifulSoup)

爬虫简介(学习日志第一篇)一、爬虫介绍爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。二、Pyyhon爬虫架构Python 爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序(爬取的有…

zookeeper 负载_ZooKeeper,策展人以及微服务负载平衡的工作方式

zookeeper 负载Zookeeper如何确保每个工人都能从工作委托经理那里愉快地完成工作。 Apache ZooKeeper是注册,管理和发现在不同计算机上运行的服务的工具。 当我们必须处理具有许多节点的分布式系统时,它是技术堆栈中必不可少的成员,这些节点…

mysql error handler_MySql错误处理(二) - Condition Handle

20.2.10.2. DECLARE处理程序DECLARE handler_type HANDLER FOR condition_value[,...] sp_statementhandler_type:CONTINUE| EXIT| UNDOcondition_value:SQLSTATE [VALUE] sqlstate_value| condition_name| SQLWARNING| NOT FOUND| SQLEXCEPTION| mysql_error_code这个语句指定…

方程组的直接解法和迭代法 python_数据与算法总结——基本数值算法2(线性方程组)...

4 基本数值算法4.2 线性方程组4.2.1 线性方程组的特性解的存在性和唯一性满足下面条件之一,A非奇异,可逆:如果b属于A的列向量张成的空间,则称方程组是相容的。范数需要满足次可加性(三角不等式)。对于n维矢…

高效的企业测试-集成测试(3/6)

本系列的这一部分将展示如何通过代码级以及系统级集成测试来验证我们的应用程序。 (代码级)集成测试 集成测试一词有时在不同的上下文中使用不同。 根据Wikipedia的定义,我指的是在代码级别上验证多个组件之间相互作用的测试。 通常&#x…

mysql level用法_MYSQL使用方法

1.查询一张表: select * from 表名;2.查询指定字段:select 字段1,字段2,字段3….from 表名;3.where条件查询:select 字段1,字段2,字段3 frome 表名 where 条件表达式…

python程序设计之文件_Python程序设计之文件操作(2)

print(sub_path)if os.path.isdir(sub_path):visitdir(sub_path)path1C:UsersQinHsiuPythonProjectsStringoovisitdir(path1)方法二:使用walk()函数来实现#方法二,通过walk()方法指定遍历目录def visidir2(path):if not os.path.isdir(path):print(error!,endn)retu…

带Prometheus的Spring Boot和测微表第4部分:基础项目

在以前的文章中,我们介绍了Spring Micrometer和InfluxDB。 所以你要问我为什么普罗米修斯。 原因是Prometheus在InfluxDB的拉模型与推模型上进行操作。 这意味着,如果将千分尺与InfluxDB一起使用,则在将结果推送到数据库中时肯定会有一些开…

前端如何实现网络速度测试功能_分析Web前端测试要点,从架构原理上进行分析,希望大家能够掌握...

基于Web前端分析过程,大概有十几个测试要点,我们今天主要来讲解结合前五个要点进行详细解说。前端测试点主要针对前端展开,什么叫前端分析呢?就是我们所有的分析和测试要点所站的视角都是针对客户端或者浏览器来对系统进行分析和测…

mysql数据库表中的类型_MySQL数据库中表类型MyISAM与InnoDB的区别

MyISAM 和 InnoDB 讲解InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能&#xf…

将Websocket与Spring Framework和Vuejs结合使用

Websocket是客户端和服务器之间的全双工(持久)连接,因此两者可以彼此共享信息,而无需重复建立新的连接。 这消除了从客户端重复轮询以从服务器获取更新的需要。 并非所有浏览器都支持Websocket,因此我们利用SockJS ja…

python函数和模块的使用方法_Python学习06_函数和模块的使用

引入在写有些代码的时候,会发现有些步骤重复了多次,他也不像循环,都是相同的东西在重复,而是指做某件事情的步骤方法,做事的人或对象发生了改变,但是方法却没有改变。要想写出高质量的代码,首先…

tmemo 选择消除行_Divi模块,行和部分加入高级动画选项

一切元素的动画选项每个Divi模块,行和部分都带有高级动画选项,你可以使用这些选项来吸引访问者并使页面更加耀眼。Divi引入一个全新的动画系统,并将这些高级动画选项扩展到每个Divi模块,行和部分!这些新选项已合并到一…

java8 streams_Java 8 Friday:使用Streams API时的10个细微错误

java8 streams在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五,我们都会向您展示一些不错的教程风格的Java …

python带参数装饰器 函数名_python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)...

一、函数名应用函数名是什么?函数名是函数的名字,本质:变量,特殊的变量。函数名(),执行此函数。python 规范写法1. #后面加一个空格,再写内容,就没有波浪线了。2.一行代码写完,下面一…