全文搜索与倒排索引

一、全文搜索

全文搜索是指计算机搜索程序通过扫描文章中的每一个词,对每一个词建立一个索引, 指明该词在文中出现的次数和位置,当用户查询时,搜索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户。这个过程类似于通过字典中的搜索字表查字的过程,Lucene是目前全球使用最广的全文搜索引擎开源库。

二、Lucene倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址,由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)

带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)

倒排索引中的索引对象是文档或者文档集合中的单词等,用来存储这些单词在一个文档或者一组文档中的存储位置,是对文档或者文档集合的一种最常用的索引机制。搜索引擎的关键步骤就是建立倒排索引,倒排索引一般表示为一个关键词,然后是它的频度(出现的次数)、位置(出现在哪一篇文章或网页中,及有关的日期,作者等信息),好比一本书的目录、标签一般读者想看哪一个主题相关的章节,直接根据目录即可找到相关的页面。不必再从书的第一页到最后一页,一页一页地查找。

三、倒排索引创建过程

假设有两篇文章1和文章2。
文章1的内容为:Tony lives in chongqing, I live in chongqing too.
文章2的内容为:He once lived in shanghai.

取关键词
由于Lucene是基于关键词索引和查询的,首先要取得这两篇文章的关键词,通常需要如下处理措施:

  1. 现在有的是文章内容,即一个字符串,先要找出字符串中的所有单司,即分词。
  2. 英文单词由于用空格分隔,比较好处理。中文单词间由于是连在一起的,所以需要特殊的分词处理。
  3. 文章中的“in” “once” “too”等词没有什么实际意义,中文中的“的” “是”等字通常也无具体含义,这些不代表概念的词是可以过滤掉的。
  4. 用户通常希望查“He”时能把含“he”和“HE”的文章也找出来,所以所有单词 需要统一大小写:
  5. 用户通常希望查“live”时能把含“lives”和“lived”的文章也找出来,所以需要 把 “lives”,“lived” 还原成 “live” 。
  6. 文章中的标点符号通常不表示某种概念,也可以过滤掉。

在Lucene中以上措施由Analyzer类完成。经过上面处理后,得到如下结果:
文章1的所有关键词为:[tony] [live] [chongqing] [i] [live] [chongqing]
文章2的所有关键词为:[he] [live] [shanghai]

文章1和文章2经过倒排后的对应关系

关键词 文章号
tony 1
live 1,2
chongqing 1
i 1
he 2
shanghai 1,2

倒排索引关键词频率位置

关键词 文章好[出现频率] 出现位置
tony 1[1] 1
live 1[2] 2,5
2[1] 2
chongqing 1[2] 3,6
i 1[1] 4
he 2[1] 1
shanghai 2[1] 3

出现位置是指在关键词中的位置。

猜你喜欢

转载自blog.csdn.net/qq_37502106/article/details/80684749