全文搜索的基本原理

此文内容大多是阅读了Lucene原理与代码分析一文,以及网络上一些其他文章的总结
[url=http://forfuture1978.iteye.com/blog/691017]Lucene原理与代码分析[/url] 作者:[url=http://forfuture1978.iteye.com/]觉先(forfuture1978)[/url]

[size=medium][b]数据分类[/b][/size]
[list]
[*][b]结构化数据:[/b]具有固定格式或有限长度的数据,如关系型数据库(先有结构再有数据)
[*][b]半结构化数据:[/b]如XML、HTML,数据的结构和内容混在一起,没有明显的区分(先有数据再有结构)
[*][b]非结构化数据:[/b]无固定格式或不定长度的数据,包括所有格式的办公文档、文本、图片、图像、音频、视频信息等等[/list]
[size=medium][b]非结构化数据搜索(全文搜索)[/b][/size]
[list]
[*][b]顺序扫描法:[/b]一个文档一个文档的找,对于每一个文档,从头找到尾,如果此文档找到指定的内容,则此文档为我们要找的文件,接着找下一个文件,直到扫描完所有的文件为止。这种方法对小数据量来说是最直接最方便的,但对于大数据量处理就太耗时了。
[*][b]索引搜索法:[/b]将非结构化数据中一部分内容提取出来,重新组织,使其变为有一定的结构,然后对此有一定结构的数据进行搜索,以达到加快搜索的目的。[/list]
[size=medium][b]倒排索引(Inverted Index)[/b][/size]
倒排索引是目前搜索引擎最常用的存储方式,也是搜索引擎的核心!在搜索时我们一般按照某些关键词来查找记录,所以也就需要按关键词来建立索引,这个索引我们就称之为:[b]倒排索引(也可称反向索引)[/b]
[color=blue]倒排索引所保存的信息一般如下:假设有100篇文档,文档编号从1到100,得到下面的结构图[/color]
[img]http://dl.iteye.com/upload/attachment/266333/f2b0a69b-2666-3d21-8d10-55cd1f3f16c3.jpg[/img]
[list]
[*][b]词典:[/b]对某种语言分词处理后,得到的一系列字符串。每个字符串都指向包含此字符串的文档(Document)链表,此文档链表又称为倒排表(Posting List)。
[*][b]倒排表:[/b]倒排表主要优点是,在处理复杂的多关键词查询时,可在倒排表中先完成查询的交、并等逻辑运算,得到结果后再对记录进行存取。这样把对记录的查询转换为地址集合的运算,从而提高查询速度![/list]
[size=medium][b]创建索引[/b][/size]
[list]
[*][b]准备数据:[/b]从数据库、Word文档、HTML网页文件等数据源抓取数据
[*][b]分词:[/b]将准备好的数据传给分词组件(Tokenizer)

1)将文档切分为一个一个单独的词
2)去除标点符号
3)去除停词(Stop Word)
[*][b]语言处理:[/b]将分词后得到的词(Token)传给语言处理组件(Linguistic Processor),对于英文一般做如下处理

1)将单词转为小写(Lowercase)
2)将单词缩减为词根形式(Stemming)
3)将单词转变为词根形式(Lemmatization)
[*][b]建立词典与倒排表(倒排索引):[/b]将语言处理处理后得到的词(Term)传给索引组件(Indexer),它主要做以下事情

1)将得到的词建立词典
2)对词典按字母顺序排序
3)合并相同的词成为倒排表
[/list]
[size=medium][b]搜索索引[/b][/size]
[list]
[*][b]输入查询语句[/b]

就像SQL语句一样,全文搜索系统的查询语句也有语法,最基本的如:and,or,not等
举例,输入的查询语句为:lucene AND solr NOT hadoop
[*][b]对查询语句进行词法分析、语言处理、语法分析[/b]

分析查询语句中的单词、关键字,对语句中的单词进行语言处理(等同创建索引中的语言处理),然后按语法规则生成语法树。
[img]http://dl.iteye.com/upload/attachment/272859/e4ec3c65-e8b3-395a-b14c-98f7fb183a0e.jpg[/img]
[*][b]搜索索引,得到符合语法树的文档结果[/b]

过程大概如下
1)首先,在倒排索引中,分别找出包含单词lucene, solr, hadoop的文档链表
2)其次,对包含lucene, solr的文档链表进行合并操作,得到即包含lucene又包含solr的文档链表
3)然后,对得到的文档链表与hadoop的文档链表比较排除,得到即包含lucene又包含solr的但不包含hadoop的文档链表
4)最后,得到的文档链表就是我们要找的结果集
[*][b]根据文档与查询语句的相关性,对结果集进行排序[/b]

对结果集中的每个文档按相关性(relevance)进行打分(scoring),分数最高的排在最前面。而推算文档的相关性一般分为两个过程
1)找出词(Term)在文档中重要性的过程,也称计算权重(Term weight)的过程
影响一个词(Term)在一篇文档中的重要性主要有两个因素
[color=red]Term Frequency (tf):即此Term在此文档中出现了多少次,tf越大说明越重要
Document Frequency (df):即有多少文档包含次Term,df越大说明这个词越普通,也就越不重要[/color]
2)判断Term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(Vector Space Mode)
这个算法研究中
[*][b]返回搜索结果[/b]
[/list]

未完
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值