什么是全文检索
一、生活中的数据总体分为:
结构化数据:指具体有固定格式或有限长度的数据。如数据库,元数据等。
非结构化数据:指没有固定格式或不定长的数据,如邮件,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)
搜索主要分为以下几步:
第一步:用户输入查询语句。
第二步:对查询语句进行词法分析,语法分析,及语言处理。
第三步:搜索索引,得到符合语法树的文档。
第四步:根据得到的文档和查询语句的相关性,对结果进行排序。