sphinx 全文检索

什么是全文检索

 

一、生活中的数据总体分为:

结构化数据:指具体有固定格式或有限长度的数据。如数据库,元数据等。

非结构化数据:指没有固定格式或不定长的数据,如邮件,word文档等。非结构化数据还有一种叫法:全文数据。

 

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

对结构化数据的搜索:

如对数据库的搜索:SQL语句。

如windows的搜索:文件名、类型、修改时间。

对非结构数据的搜索:

如windows对文件内容的搜索,linux 系统下用 grep 命令。

如搜索引擎:google 、百度可以搜索大量内容的数据。

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

 

三、对全文数据的搜索可以分为两种:

1、顺序扫描:如要找内容包含某个字符串的文件,会一个文档一个文档的从头到尾的找,如 like 查找。

2、索引扫描:把非结构化数据内容提取出来一部分,重新组织,让它变得有结构化,这部分我们提取出来的数据就叫做索引。

 

四、全文索引大体分为两个过程:

索引创建(Indexing)和 索引搜索(Search)

索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。

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

 

三个重要问题

1、索引里面究竟存些什么?(Index)

2、如何创建索引?(Indexing)

3、如何对索引进行搜索?(Search)

 

1、索引里面究竟存些什么?

索引所保存的信息一般如下:

如上图,假设现在有 100 篇文章,文章的编号从 1 到 100 表示。

词典:保存的是一系列的字符串。

倒排表:指向包含字符串的文档列表。

比如说:我们要寻找既包含字符串 “Sphinx ” 又包含字符串 “php” 的文档,我们只需要以下几步:

1、取出包含字符串 “sphinx” 的文档链表。

2、取出包含字符串 “PHP”的文档链表。

3、通过合并链表找出即包含 “sphinx” 又包含 “php” 的文件。

2、如何创建索引?

全文索引的索引过程一般有以下几个步:

1、一些需要创建索引的文档( Documents) (对应mysql 的记录)

2、将原文文档传递给分成组件(Tokenizer)

3、将得到的词元(token)传给语言处理组件(Linguistic Processor)

4、将得到的词(Term)传递给索引组件(Indexer)。

 

3、如何对索引进行搜索?(Search)

搜索主要分为以下几步:

第一步:用户输入查询语句。

第二步:对查询语句进行词法分析,语法分析,及语言处理。

第三步:搜索索引,得到符合语法树的文档。

第四步:根据得到的文档和查询语句的相关性,对结果进行排序。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值