基于MySQL全文检索引擎—sphinx

sphinx全文检索

 

(1)全文检索简介

 

1.1 数据分类

 

生活中的数据总体分为

 

①.结构化数据: 指具有固定格式或有限长度的数据,如数据库(int char),元数据等。

 

②.非结构化数据: 指没有固定格式或不定长的数据。如文本文档,text型数据,varchar型数据,word文档等。

非结构化数据还有一种叫法:全文数据

 

1.2搜索的分类

 

按数据的分类,搜索也分为两种:

 

①.对结构化数据的搜索:SQL语句、文件名的搜索

 

②.对非结构化数据的搜索:linux下的grep,对文章关键字的搜索。

 

对非结构化数据的搜索也叫对全文数据的搜索,即全文搜索。

 

 

1.3 全文搜索的方法

 

①.顺序扫描:如要找的内容包含某个字符串,会一个文档一个文档的从头到尾的找,Like查找

 

②.索引扫描:把非结构的数据中的内容(一般是单词、词组)提取出来一部分重新组织,让它变得有结构化,这部分我们提取出来的数据就叫做索引。(sphinx的工作内容)

 

 

1.3sphinx简介

 

sphinx是SQL phrase index(查询词组索引)的缩写,是一个基于SQL的全文检索引擎

 

sphinx 全文检索不支持中文分词不支持nosql数据库

 

中文分词:

 

 

Coreseek技术:中文分词

sphinx+coreseek支持中文的全文检索引擎

 

 

sphinx的优缺点:

 

 

 

 

 

 

mysql的全文索引full text和sphinx的区别

 

 

 

 

 

 

1.4 sphinx检索过程

 

 

[1]形成索引表

 

sphinx将原文本text,经过自己的分词(语句分为单词),将分词和原文本的id对应,形成一个索引表

 

原文本的id:表的字段,主键

文本:表的字段,text格式

 

 

sphinx分词后形成的索引结构图,如下(左边的为形成的索引、右边为原文本内容)

 

 

 

格式为:

 

   文本的id号

 

sphinx形成索引过程

 

1.将mysql内的文档(text格式)传给分词组件(Tokenizer)

 

2.分词组件将语句拆分,去除一些无用的词,形成词元,并传给语言处理组件

 

3.语言处理组件将得到的词元,经过处理(过去式转换、复数词转换等),和筛选(去重..)得到词,传给索引组件

4.索引组件生成索引(词 文本id)

 

 

sphinx形成索引过程图例:

 

①.先准备文本文档

 

 

②.将原文本文档提交给分词组件

 

 

③.将词元传递给语言组件

 

 

④.将词传递给索引组件形成索引

 

 

:最终形成的完整的索引格式为

 

 文档id  文档频率 词频

 

文档频率:总共有多少文档出现过该词

词频:词在文档出现的次数

 

 

 

 

[2]搜索索引

 

搜索索引就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程

 

 

搜索索引分步骤

 

①.用户输入查询语句

②.对查询语句进行词法分析,语法分析,及语言处理(对查询的搜索语句也进行了分词处理,比如:lamp linux进行分词后,会在索引搜索lamp和linux两个词)

③.搜索索引,得到符合语法树的文档

④.根据文档和查询语句的相关性,对结果进行排序(由匹配到的词,得到文档id,再执行SQL语句:where id=查询到的文档id 即可得到该文档的数据记录)

 

 

 

 

1.5sphinx创建索引和索引搜索总结

 

猜你喜欢

转载自blog.csdn.net/chuxuan909/article/details/70338491
今日推荐