当前课程知识点:互联网大规模数据分析技术 >  第七章 Web链接分析 >  第20讲 Lucene信息检索平台 >  第20讲 Lucene信息检索平台

返回《互联网大规模数据分析技术》慕课在线视频课程列表

第20讲 Lucene信息检索平台在线视频

下一节:第21讲 推荐系统简介

返回《互联网大规模数据分析技术》慕课在线视频列表

第20讲 Lucene信息检索平台课程教案、知识点、字幕

欢迎来到

互联网大规模数据分析技术

的课堂

我是今天的主讲教师李琳

来自武汉理工大学

今天我们开始第20讲

Lucene信息检索平台

在这一讲当中

我们首先会对Lucene

做一个简要的介绍

重点我们会讲一下

倒排索引文件Analyzer

分析机制以及查询的问题

首先我们来看一下什么是Lucene

Lucene是Apache软件基金学会的

一个开源的项目

是一个全文的检索引擎工具包

大家注意一下

它不是一个完整的引擎应用

它只是一种架构

也就是说它为软件开发人员

提供了一个简单易用的工具包

什么是全文检索呢

在前面的课程当中

大家知道了什么是信息检索

什么是Web搜索

在这里我们对全文检索

能做一个简要的回顾

在这个过程当中主要有三个步骤

第一,计算机要对文章当中的

每一个词建立一个索引

这个索引要指明该词在文件当中

出现的次数以及位置

当然这个位置信息

在索引文件当中是可选的

当索引文件构建好之后

也就是我们前面跟大家所讲的

倒排索引数据结构

用户输入查询词的时候呢

检索程序会根据先前建好的索引

进行查询

从而将查找的结果反馈给用户

这个全文是指在一篇文章当中

对所有的文字进行检索和索引的

这样一个过程

这个过程就相当于字典当中

通过字典的目录

来查找文字的这样一个过程

这是Lucene的一个版本历史

最近我们是已经到了

2014年的最新版本

从2000年开始

哪些商用的网站在用Lucene

这样一个全文检索架构呢

这里我们列出了一些

大家耳熟能详的网站

比如说Apple、美国在线

eclipse、Linkedin、IBM

那么更多大家可以到Apache的

网站上去查看更详细的列表

我们把Lucene和传统的数据库

做一个对比

在这个表中大家可以看到

我们都有索引

传统的数据库有

Lucene也有

但是Lucene的索引

是一个反向的

就是我们前面所学过的倒排索引

在我们的数据库当中

它的索引是根本用不上的

对于Like查询来说

数据库仍然要去逐个的去遍历

所有的文字

也就是说在传统的数据库中

做文本的查询仍然要

逐个逐个的去匹配

它没有这样一个倒排索引的机制

接下来我们看一下

这样一个匹配的效果

Lucene来说是以单词term

为单元来进行匹配的

而在数据库当中

它是按字符串这样一种方式

比如说像net

把一些什么样的也包含进来

这样一个词也会包含进来

也就是说它把net

作为这个单词的子串

而不是把它当做一个单词

来进行处理

接下来呢

在Lucene当中

我们前面学过了Cosine

学过了PageRank

这些都能对查询的文档

进行排序

而在传统的数据库当中

是没有匹配程度的

接下来我们再看一下

在结果的输出方面

Lucene采用了TopK的方式

也就是说我只输出前100前10

或者是前20

这个可以用用户在输入界面当中

去进行选择

但是在我们的数据库当中

它会返回所有的集合

那么当匹配的条目太多的时候

内存无法胜任这样的工作

最后我们可以看一下

我们对于不同的语言的分析

我们的Lucene都提供了接口

支持多语言的操作

数据库没有这样的接口

或者接口比较复杂

没办法去定制

这是我们对它进行了一个对比

也就是说在全文检索Lucene

这样一个开源的框架

是比较适合的

好,那我们接下来来看一下

Lucene的创新之处

在这里面我们列了一些对比

首先我们看一下索引

那么Lucene的索引即可以做

增量式的

也就是说有新的文件到来之后

我可以小批量的处理之后

再和原来的大的索引文件

进行合并

而那我们到其它的

开源检索系统当中的

这方面的支持就不大好

其次,我们的数据源

Lucene没有定义具体的数据源

也就是说一个文章的结构

它可以是灵活多样

doc、pdf

各种各样的文档格式

它都能够适用

第三对于内容的抓取

Lucene的文档虽然我们是一个

全文的非结构化的数据

但是在Lucene当中

我们仍然能够定义相关的字段

来存储一些元数据的信息

通过这样一些分析

我们可以看到Lucene

在文本处理当中有它独到之处

接下来我们看一下

当你想用Lucene来创造一个

自己的应用程序的时候

你该怎么来做呢

大家可以看到在Lucene

我们首先给一个输入给Lucene

然后Lucene才会产生一个输出

这个输入是什么呢

是你的各种各样的data

在这个里面我们就特指文本

那么这样一些文本

可以来自于哪里呢

可以来自于你自己的文件系统

可以来自于互联网

那我们把互联网引入到这来

就是我们的搜索引擎

可以是你的传统数据库

也可以人工去进行输入

当你把这样一些数据

传送到Lucene的索引机制之后

它会建立倒排索引的文件

这个时候

当用户再提出查询需求的时候

我们能够从索引的数据库当中

找到相匹配的文档

从而反馈给用户

大家在采用Lucene

这样一个架构的时候

要把数据准备好

要把分析的

这样一些机制去理顺

接下来我们看一下

Lucene这样一些优点

Lucene的文件格式

是独立于应用平台的

前面我们看到了

Lucene最关键的是索引文件

这个索引文件不管你是windows

是苹果还是任何的操作系统

它都是可以使用的

其次

这个索引文件的索引文件

它实行了分块索引

这个对于大规模的数据处理

是非常有用的

其次,Lucene设计了

独立于语言和文件格式的

文本分析接口

其实它对中文的支持也非常好的

大家有一定自然语言处理基础的

同学都会知道

中文和英文在文本的分析上面

是有很大的区别

Lucene的

这样一个倒排索引结构

前面的课程当中

我们已经进行了学习

叫做什么呢

大家已经记住了

叫Inverted index

中文我们叫倒排索引

这个倒排索引我们已经知道了

它的数据结构

前面的课程当中

我们已经进行了学习

今天我们仍然举一个例子

来帮助大家做一个回顾

在这里我有三条文本

T0、T1和T2

大家可以看一下文本的内容

这个文本当中包含了不同的单词

我们要对这些单词建立一个索引

在Lucene当中

我们是怎么来建立呢

Lucene的索引包含的信息呢

比我前面的内容稍微要多一点

大家来看,a这个单词

(2,2)代表什么意思呢

我们回过来看一下

2代表出现在文档的id

也就是T2

那么

这个第二个逗号2代表什么呢

我们的第一个单词从零开始

第二个单词四是1

第三个单词是2

也就是说

Lucene的倒排索引文件当中

不但记录了

这个单词所在的文档id

还记录了它在文档当中的位置

所以这就是

a所对应的(2,2)的含义

以此类推

banana、is、it、what

都是同样的道理

现在假设我的查询词是

what is it

按照关系

what出现在哪里呢

0、1

is出现在哪里呢

0、0、1、2

it出现在哪里呢

0、1、2

所以同时出现这三个词的文档

应该是什么

0和1

在这样一个检索过程当中

我们只用到了文本的id

我们看一下0和1

我们查询词大家还记不记得

是什么呀

what is it

what it is

因为我只考虑单词有还是没有

并没有考虑它的位置

所以T0和T1都匹配

如果在这样一个索引结构当中

我们把位置信息也考虑进来

那么我们能够实现完全的匹配

这样的情况下

只有T1是满足我们的要求

这个大家可以在课后

再具体的去思考一下

这里有一些小问题

需要大家来注意一下

对于检索系统来说

我找到结果并不是最终的目的

最终的目的是进行排序

另外,大量的搜索引擎

比如数据库的搜索引擎

是用B树的结构来维护索引

这种索引的更新

会带来很大的问题

我们看到Lucene的创新之处

也就是改进之处

Lucene会定期的

把新的小索引文件

合并到大的索引文件

这样针对不同的更新策略

批次的大小都是可以调整的

前面我们讲到了找文件的问题

找文件所建立的索引文件

在Lucene当中

究竟是一个什么样子呢

这样一个图

表示出来了它的索引文件

在我们Lucene的

开源的软件包当中

大家要注意一下

比如说我们没有tis

用于存储分词后的term

这个地方个就是的term

这个term

它有一个document frequency

也就是说它出现在了

一个文档当中

这一个文档当中它出现之后

它在这个文档当中

出现的频率是多少呢

这个单词只出现了一次

这个一次出现的位置在哪里呢

第9个单词

所以把刚才我们所讲的信息

都全部存在了

这样的数据结构当中

在Lucene当中

刚才我们主要是讲解了

如何建立索引

建立完之后我们还要进行查询

所以在这个里面大家如果要用

Lucene这个开源架构

大家要考虑一下去学习这样一些

核心的类所代表的意思

这些核心的类

它具有什么方法具有什么属性

你能存什么能放什么

这是需要大家自己和思考学习的

这里有一个demo

当然

这个demo我们是用java写的

我们简单的来看一下

首先

我们在这里要告诉Lucene

你的索引文件要放在哪里

其次你要告诉Lucene

我要用一个分析器

来进行索引文件的创建

再接下来你要告诉Lucene

你的数据在哪里

有了数据

有了索引文件存放的位置

又建立了索引文件的分析器

接下来

我们就可以对这样一个文档

进行索引的构建

在索引的构建当中你还可以给出

这个文档的一些字段

比如说内容字段

比如说文档的名字字段

比如文档存在哪个具体的位置

这些字段信息都可以存起来

便于后续再结果显示当中的使用

这是一个简单的demo

为了使用它

大家还需要把前面刚才所讲的

四个类去了解清楚

通过前面的分析可以看到

索引文件的构造

是通过Analyzer这样一个组件

来完成的

在Analyzer当中

你需要对document不同的field

去进行分析

你可以说分析field1

可以分析field2

比如说文章的title

比如说文章的内容

也可以说

某些field你不需要去分析

这些都可以通过编程来进行实现

最终把它存储在我们的

索引文件当中

当然这个类

是由Lucene已经写好了

你们只需要了解输入是什么

输出是什么

从而Lucene能够帮助你

自动去建立这样一个索引文件

这里我列出了这个字段

常用的一些属性

大家在具体的使用当中

可以查看一些手册

来完成这方面的使用和学习工作

其次

在Lucene当中呢

我们还需要

对Lucene已经建好的索引

来进行查询

这个查询就要用到这个查询类

查询完了之后呢

我们还需要将结果进行返回

大家看到这是一个top

也就是说

我只返回向前N个排名的结果

我并不是一次把所有的检索结果

都进行返回

所以接下来我们看一下查询

在Lucene当中

查询提供给了哪些

一、我们可以做

一个单词一个单词的查询

二、我们可以做前缀的查询

比如说以am开头这样的查询

我们可以做有无的这个一个查询

我们可以做这个带星号的查询

也就说我们提供了

各种各样的查询种类

当你要建立一个搜索引擎的时候

你可以考虑我给用户的查询

提供了一些什么样的查询类别

从而满足用户的信息需求

整个Lucene的包

就有这样一些内容

大家在使用Lucene包的时候

可能要去熟悉这样一些各个过程

比如说分析器、存储器

索引文件、查询、存储

以及这样各种各样的工具

大家去参考它的手册

来完成进一步的学习

最后,我们来看一下

当你获得文档之后

你要给它排序

怎么来排序呢

有印象的同学还记得

在前面的课程当

我们学习了

基于余弦夹角这样一个排序

还有基于PageRank

这样一个文档重要性的排序

在这个里面Lucene的评分机制

是什么呢

当然你可以改写这个评分机制

我们Lucene默认的评分机制是

由这样一些变量组成的

我们前面所学的tfidf

当然有同学会问我

为什么idf你加平方呢

这个是Lucene自己定的

你不喜欢可以改

还有

你可以把某个字段的权重去增加

另外这是对长度的归一化处理

同时你还可以加一些协调因子

根据你的需要

所以这样一个打分机制

大家可以重写这样一个打分机制

来完成自己的评分规则

这里Lucene

只是给一个参考作用

最后我们Lucene

只是一个工具包

如果大家要搭建企业级的

搜索服务器的时候

Lucene就显得不是那么完美

这个时候的我们的开源的组织

有这样一个Solr的项目

它是一个基于Lucene java库的

企业级搜索服务器

它的查询结果将会以XML

以及json的这样的一种格式

进行输出

它能够完成垂直的搜索

它是一个面向企业级应用的扩展

今天的课程就到这里

感谢同学们的观看

互联网大规模数据分析技术课程列表:

第一章 大数据与数据挖掘概述

-第1讲 大数据与数据挖掘概述

--第1讲 大数据与数据挖掘概述

第二章 关联规则

-第2讲 频繁项集和关联规则的基本概念

--第2讲 频繁项集和关联规则的基本概念

-第3讲 Apriori算法

--第3讲 Apriori算法

-第4讲 Apriori算法的改进与兴趣度度量

--第4讲 Apriori算法的改进与兴趣度度量

第三章 分类算法

-第5讲 分类的基本概念

--第5讲 分类的基本概念

-第6讲 决策树

--第6讲 决策树

-第7讲 简单贝叶斯分类

--第7讲 简单贝叶斯分类

第四章 聚类算法

-第8讲 聚类的基本概念

--第8讲 聚类的基本概念

-第9讲 K-Means & K-Medoids Clustering

--第9讲 K-Means & K-Medoids Clustering

-第四章 聚类算法--习题

第五章 大数据平台与技术

-第10讲 大数据处理平台Hadoop

--第10讲 大数据处理平台Hadoop

-第11讲 MapReduce编程

--第11讲 MapReduce编程

-第12讲 大数据处理平台Spark

--第12讲 大数据处理平台Spark

-第13讲 NoSQL数据库

--第13讲 NoSQL数据库

第六章 信息检索

-第14讲 Web信息检索简介

--第14讲 Web信息检索简介

-第15讲 信息检索之倒排索引

--第15讲 信息检索之倒排索引

-第16讲 信息检索之TFIDF

--Video

-第17讲 信息检索之相似度排序

--第16讲 信息检索之TFIDF

第七章 Web链接分析

-第18讲 Web搜索之链接分析

--第18讲 Web搜索之链接分析

-第19讲 Web搜索之PageRank

--第19讲 Web搜索之PageRank

-第20讲 Lucene信息检索平台

--第20讲 Lucene信息检索平台

-第七章 Web链接分析--习题

第八章 推荐系统

-第21讲 推荐系统简介

--第21讲 推荐系统简介

-第22讲 推荐系统之协同过滤

--第22讲 推荐系统之协同过滤

-第23讲 Mahout数据挖掘平台

--第23讲 Mahout数据挖掘平台

-第24讲 信息过滤评价体系

--第24讲 信息过滤评价体系

-第八章 推荐系统--习题一

-第八章 推荐系统--习题二

自我提升练习

-综合编程题

第20讲 Lucene信息检索平台笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。