全文索引介绍

来源:互联网 发布:围巾推荐知乎 编辑:程序博客网 时间:2024/06/16 17:14

相信所有人都用过百度,谷歌等搜索引擎。在使用过程中,我们会发现“搜索”这个操作的神奇之处, 我搜索“IT博客”这个关键词,搜出来的结果会“IT”相关的,有“博客”相关的,有“IT博客”相关的,搜索引擎很智能的将我们我们搜索的词分解开,去查找所有相关的内容。

在某宝,某猫等电商网站的搜索功能中也有这种神奇的能力,而且搜索的速度异常的快。

如何快速的从海量的数据中快速的搜索出我们想要的相关数据,这就是“全文搜索”所要做的事。而sphinx就在这方面做得极为出色。

全文数据索引分类

  1. 顺序扫描:如要查找大量的文本中找出包含某个字符串的特定文本文件,需要一个一个文件去扫描。数据库的like查询顺序扫描
  2. 索引扫描:将非结构化的数据中的关键内容提取出来,形成结构化的数据集合,提取出来的这部分数据就叫做索引

全文索引过程

  1. 创建索引:从数据中提取信息创建为索引
  2. 搜索索引:根据用户的请求,搜索创建的索引,从而得到用户想要的查询结果

索引创建原理

假设我们想在有以下几条数据:

  1. A moment later, Cohen picked up the phone. ‘Hello?’
  2. She could see the open door of a departmental office. ‘Hello! Excuse me. This is the department of French, isn’t it?’

创建索引有以下几个步骤

  1. 将源文档传给分词组件(tokenizer)
  2. 分词组件将源文档分词为一个个单词
  3. 去除所有的标点符号
  4. 去除停词,如the,a,this等,这类词汇对搜索引擎来说没有意义
  5. 经过分词之后,得到一个结果集,称之为词元,也就是上面所有单词的集合

如上述源文档得到的词元是:
moment later Cohen picked up 等。

然后将词元传给语言处理组件,将词元转换为最原始的状态,例如:

  1. 大写转换为小写
  2. 去除时态
  3. 去除单复数形式

最后把处理好的词传给索引组件(Indexer)进行索引操作

索引组件主要做这两件事:

  1. 利用得到的词创建一个key-value形式的字典,key是传过来的词元,value是对应的文档ID。(文档ID就是数据库的每一条记录的主键)
  2. 对字典按照字母顺序进行排序

经过以上的流程,就形成了一个索引表

索引搜索

  1. 获取用户输入的内容
  2. 词法,语法分析,语言处理,得到分词
  3. sphinx根据分词搜索索引,得到相应的文档ID
  4. 查出文档内容,并排序
0 0