全文检索技术原理

Lucene是solr实现的基础,而Lucene的实现基础是全文检索技术

接下就谈谈基础的全文检索技术实现的原理。

检索是指对数据的,所以检索技术是针对于某一种或特有的类型的数据。而针对于不同的数据类型对应有不同的检索方式。
  • 数据的分类

结构化数据:具有固定格式或有限长度的数据,数据库、元数据
非结构化数据:长度不定或无固定格式的数据,邮件、Word文档

  • 扫描方法
    顺序扫描法:如想查找某个文档包含某个字符串,从头到尾扫描整个文件,只要含有想要字符串文档都选取,然后进行下一个文档的扫描。对于非结构化文件,速度极慢、效率极低。
    索引:通过对非结构化文件中提取重要的信息然后进行重组的信息。典型的例子——字典检索方式。
对文中使用到的词稍作解释。
  • 停词:常用的,常见的,通俗的词,如:is 、the 、this等
  • 词元:去除停词以后的关键词。
  • 全文检索:先建立索引,然后对索引进行的搜索的过程。
  • 反向索引:从字符串到文件的映射与从文件到字符串的映射正好相反,故称为反向索引。
  • 倒排表:每个字符串都指向包含次字符串的文档(document)链表
  • 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
  • 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
全文检索大致分为索引创建和搜索索引两个过程。
索引过程
  • 获取原文档
    得到原文档,通常采用爬虫类工具从互联网、数据库以及文件系统中获取。
    开源爬虫工具:Nutch(能够抓取和分辨网络web网站的数据) ,jsoup(java的HTML解析器),heritrix(java开发的,开源的网络爬虫工具,扩展性较好)

  • 构建文档
    1)、将获取的原文档传给分词组件,分词组件将文档切分(split)一个个单词
    2)、去除停词(通过与停词集合的比对,存在于分词组件中)
    3)、去除标点
    4)、最后获取词元
    文档(document)包括一个个的域(field),域(field)中存储内容。每个文档中可以有多个域,不同的document中可以有相同的field,一个document中可以有相同的field,但是没个document的ID必须唯一
    5c4041fcf2ef5

  • 分析文档
    1)、将词元传递给语言处理组件
    2)、变为小写
    3)、将词元缩减为词根(如:cars到car、driving到drive)stemming
    4)、将词元转变为词根(如:从drove到drive、driving到drive)lemmatization
    3)、4)不分顺序也不互斥,还有交叉。两者区别在于转变是根据保存某种字典方式做转变;缩减是采用固定算法做缩减,基本为去除后尾。

  • 创建索引
    1)、将得到的词元传给索引组件
    2)、索引组件将得到的词元创建一个字典,并且按照字母顺序升序排列。
    3)、对相同的词元进行合并创建一个文档倒排链表
    如下图中解释:
    a、Document frequency:既文档频率,有多少个文档出现当前词元(下图中allow在两个文档中出现)

    b、Frequenry:频率,当前文档中出现几次当前词元(allow在文档1中出现高的频率为2,在文档2中为1)
    5c40431f0e96d

搜索过程

1)、用户输入查询语句
2)、对查询语句进行词法分析----进行关键字比对,如输入不正确,将关键字做一个普通的词处理(内有关键字库)
3)、对查询语句进行语法分析----将语句根据语法规则形成语法树
4)、对查询语句进行语言处理----同索引语言处理
5)、搜索索引,在反向链表中找到相应的文档链表,并进行合理的差、并操作得到文档链表
6)、对所得文档进行相关性降序排序(涉及排序算法:空间向量模型算法)

  • 、计算词的权重
  • 、将权重看做向量,查询语句看做向量,每个词是一个维度,进行向量间的余弦值计算,值越大相关性越高,保持两个向量的维度相同,不同则取并集,若不含某词则权重为0。
搜索引擎组件
  •   Web爬虫
    
  •   数据库:通过web爬虫工具采集的数据存储在数据库中
    
  •   搜索接口:用户与数据库的接口,帮助用户搜索数据库
    

猜你喜欢

转载自blog.csdn.net/xiaozou_it/article/details/86527820