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创建索引和索引搜索总结