Lucene课堂笔记Word格式文档下载.docx

上传人:b****1 文档编号:5851388 上传时间:2023-05-05 格式:DOCX 页数:22 大小:1.50MB
下载 相关 举报
Lucene课堂笔记Word格式文档下载.docx_第1页
第1页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第2页
第2页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第3页
第3页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第4页
第4页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第5页
第5页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第6页
第6页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第7页
第7页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第8页
第8页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第9页
第9页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第10页
第10页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第11页
第11页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第12页
第12页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第13页
第13页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第14页
第14页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第15页
第15页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第16页
第16页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第17页
第17页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第18页
第18页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第19页
第19页 / 共22页
Lucene课堂笔记Word格式文档下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Lucene课堂笔记Word格式文档下载.docx

《Lucene课堂笔记Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Lucene课堂笔记Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。

Lucene课堂笔记Word格式文档下载.docx

1.3.2倒排索引

倒排索引(也称为倒排文件)是一种存储了来自文本中的映射的索引数据结构。

比如单词或者数字,对应到它们在数据库、一个文件或者一组文件中的位置。

它是在文档检索系统中使用的最流行的数据结构,在搜索引擎中有大规模使用案例

例如我们使用新华字典查询汉字,新华字典有偏旁部首的目录(索引),我们查字首先查这个目录,找到这个目录中对应的偏旁部首,就可以通过这个目录中的偏旁部首找到这个字所在的位置(文档)。

倒排索引做两件事情:

1、提取资源中关键信息,建立索引(目录)

2、搜索时,根据关键字(目录),找到资源的位置

1.4倒排索引

1.4.1相关术语

文档(Document):

一般搜索引擎处理的对象是互联网网页,对于搜索引擎来讲,Word、PDF、html、XML等不同格式的文件都可以称为文档,一般以文档来表示文本信息。

文档集合(DocumentCollection):

由若干文档构成的集合成为文档集合。

比如海量的互联网网页等。

文档编号(DocumentID):

在搜索引擎内部,会为文档集合每个文档赋予一个唯一的内部编号,以作为文档的唯一标识,以便于处理。

单词编号(WordID):

与文档编号类似,搜索引擎内部以唯一的编号来表示某个单词,以作为某个单词的唯一表示。

倒排索引(InvertedIndex):

倒排索引是实现单词——文档矩阵的一种具体存储形式。

通过倒排索引,可以根据单次快速获取包含这个单词的文档列表。

倒排索引主要由两个部分组成:

单词词典和倒排文件。

单词词典(Lexicon):

搜索引擎通常的索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引记载单词本身的一些信息及指向倒排列表的指针。

单词也就是我们在搜索时的一些关键字,也称为词条。

倒排列表(PostingList):

倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文当中出现的位置信息,每条记录成为一个倒排向(Posting)。

根据倒排列表,即可获知哪些文档包含某个单词。

倒排文件(InvertedFile):

所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即为倒排文件,倒排文件是存储倒排索引的物理文件。

1.4.2单词-文档

单词-文档矩阵的基本模型:

该矩阵模型代表的含义:

词1在文档1、文档4中出现,文档1包含了词1和词4。

词2在文档2、文档5中出现,文档2包含词2。

1.4.3创建倒排索引过程

1.4.4倒排索引(文件)

1.4.4.1基本倒排索引结构

第1列单词ID即为每个单词的编号。

 

第2列即为对应的单词。

第3列即为每个单词对应的倒排序表。

(比如单词“拉斯”,单词编号为8,倒排序表为{3,5},说明文档集合中文档3和文档5包含这个单词。

1.4.4.2复杂倒排索引结构

就编号8—拉斯—{(3:

1);

(5,1)}来说,(3,1)表示“拉斯”在文档3中出现一次,(5,1)表示“拉斯”在文档5中出现1次。

1.4.4.3完整倒排索引结构

就编号8—拉斯—2—{(3;

1;

<

4>

),(5;

)}来说,文档频率2表示在两个文档出现。

“<

”表示单词出现的位置是文档中的第4个单词。

这个倒排索引基本上是一个完备的索引系统了,实际搜索系统的索引结构基本如此。

2Lucene介绍

2.1概念

Lucene是apache下的一个开放源代码的全文检索引擎工具包。

提供了完整的查询引擎和索引引擎,部分文本分析引擎。

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。

●Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供

●Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具

●Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品---solr

2.2Lucene与搜索引擎的区别

全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统,包括建立索引、处理查询返回结果集、增加索引、优化索引结构等功能。

例如:

XX搜索、eclipse帮助搜索、淘宝网商品搜索等。

搜索引擎是全文检索技术最主要的一个应用,例如XX。

搜索引擎起源于传统的信息全文检索理论,即计算机程序通过扫描每一篇文章中的每一个词,建立以词为单位的倒排文件,检索程序根据检索词在每一篇文章中出现的频率和每一个检索词在一篇文章中出现的概率,对包含这些检索词的文章进行排序,最后输出排序的结果。

全文检索技术是搜索引擎的核心支撑技术。

Lucene和搜索引擎不同,Lucene是一套用java或其它语言写的全文检索的工具包,为应用程序提供了很多个api接口去调用,可以简单理解为是一套实现全文检索的类库,搜索引擎是一个全文检索系统,它是一个单独运行的软件系统

2.3为什么要学习Lucene

原来的方式实现搜索功能,我们的搜索流程如下图:

上图就是原始搜索引擎技术,如果用户比较少而且数据库的数据量比较小,那么这种方式实现搜索功能在企业中是比较常见的。

但是数据量过多时,数据库的压力就会变得很大,查询速度会变得非常慢。

我们需要使用更好的解决方案来分担数据库的压力。

现在的方案(使用Lucene),如下图

为了解决数据库压力和速度的问题,我们的数据库就变成了索引库,我们使用Lucene的API的来操作服务器上的索引库。

这样完全和数据库进行了隔离。

2.4Lucene官网

官网:

http:

//lucene.apache.org/

2.5Lucene主要包

包名

功能

org.apache.lucene.analysis

语言分析器,主要用于的切词

Lucene提供的分析器实现类在:

lucene-analyzers-common-4.10.3.jar

org.apache.lucene.document

索引存储时的文档结构管理,类似于关系型数据库的表结构

org.apache.lucene.index

索引管理,包括索引建立、删除等

org.apache.lucene.queryParser

查询分析器,实现查询关键词间的运算,如与、或、非等,生成查询表达式,

org.apache.lucene.search

检索管理,根据查询条件,检索得到结果

org.apache.lucene.store

数据存储管理,包括一些I/O操作

org.apache.lucene.util

公用类

3Lucene全文检索流程

3.1创建索引和搜索流程

1、创建索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:

确定原始内容即要搜索的内容获得文档创建文档分析文档索引文档

2、红色表示搜索过程,从索引库中搜索内容,搜索过程包括:

用户通过搜索界面创建查询执行搜索,从索引库搜索渲染搜索结果

3.2创建索引过程

创建索引的过程其实就是将原始的文档数据创建索引并存储到索引库中的过程。

1、创建document对象(文档)

2、为文档添加Field

3、创建建立索引对象IndexWriter

4、将文档添加到索引库中

3.3基于索引库检索过程

1、将检索内容转成query对象

2、创建检索对象

3、通过检索对象进行检索

4、对检索的结果进行遍历

4Lucene入门程序

4.1创建索引

4.1.1导入jar包

4.1.2代码

4.1.3查看索引库内部结构

在该jar的当前目录下,打开cmd窗口,并执行以下的命令,即可打开lukeall。

overview视图说明:

document视图说明:

4.2基于索引库检索

5LuceneAPI详解

5.1创建索引的API

5.1.1Document

Lucene创建索引时的原始文档。

5.1.2IndexableField

●LongField:

long类型,会切词

●StringField:

string类型,通过StringField构建的字段不会被切词(分词)。

●TextField:

Text类型,会切词。

●newXXXField(name:

字段的名称,value:

字段的值,store:

是否存储到索引库中)

5.1.3Directory

用来指定索引库存放的位置。

●FSDirectory,指的是文件磁盘的索引路径

●RAMDirectory,指的是内存中的索引路径

5.1.4Analyzer

5.1.4.1概念

在对Docuemnt中的内容进行索引之前,需要使用分词器进行分词,分词的目的是为了搜索。

分词的主要过程就是先分词后过滤。

●分词:

采集到的数据会存储到document对象的Field域中,分词就是将Document中Field的value值切分成一个一个的词。

●过滤:

包括去除标点符号过滤、去除停用词过滤(的、是、a、an、the等)、大写转小写、词的形还原(复数形式转成单数形参、过去式转成现在式)等。

什么是停用词?

停用词是为节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些字或词,这些字或词即被称为StopWords(停用词)。

比如语气助词、副词、介词、连接词等,通常自身并无明确的意义,只有将其放入一个完整的句子中才有一定作用,如常见的“的”、“在”、“是”、“啊”等。

●注意:

搜索使用的分析器要和索引使用的分析器一致

5.1.4.2中文分词器

学过英文的都知道,英文是以单词为单位的,单词与单词之间以空格或者逗号句号隔开。

所以对于英文,我们可以简单以空格判断某个字符串是否为一个单词,比如IloveChina,love和China很容易被程序区分开来。

而中文则以字为单位,字又组成词,字和词再组成句子。

中文“我爱中国”就不一样了,电脑不知道“中国”是一个词语还是“爱中”是一个词语。

把中文的句子切分成有意义的词,就是中文分词,也称切词。

我爱中国,分词的结果是:

我、爱、中国。

●StandardAnalyzer:

单字分词:

就是按照中文一个字一个字地进行分词。

如:

“我爱中国”,

效果:

“我”、“爱”、“中”、“国”。

●CJKAnalyzer

二分法分词:

按两个字进行切分。

“我是中国人”,效果:

“我是”、“是中”、“中国”“国人”

5.1.4.3第三方的中文分词器

●paoding:

庖丁解牛最新版在 

中最多支持Lucene3.0,且最新提交的代码在2008-06-03,在svn中最新也是2010年提交,已经过时,不予考虑。

●mmseg4j:

最新版已从 

移至 

4.10,且在github中最新提交代码是2014年6月,从09年~14年一共有:

18个版本,也就是一年几乎有3个大小版本,有较大的活跃度,用了mmseg算法。

●IK-analyzer:

最新版在4.10从2006年12月推出1.0版开始,IKAnalyzer已经推出了4个大版本。

最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。

从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

但是也就是2012年12月后没有在更新。

●ansj_seg:

最新版本在 

tags仅有1.1版本,从2012年到2014年更新了大小6次,但是作者本人在2014年10月10日说明:

“可能我以后没有精力来维护ansj_seg了”,现在由”nlp_china”管理。

2014年11月有更新。

并未说明是否支持Lucene,是一个由CRF(条件随机场)算法所做的分词算法。

●imdict-chinese-analyzer:

最新版在 

,最新更新也在2009年5月,下载源码,不支持Lucene4.10。

是利用HMM(隐马尔科夫链)算法。

5.2基于索引库检索的API

5.2.1QueryParser

作用:

根据哪个字段并分词检索。

5.2.2MultiFieldQueryParser

指定多个字段检索并分词

5.2.3TermQuery

根据词条进行检索,不会切词了,因为词条已是最小单位。

5.2.4WildcardQuery

模糊检索

5.2.5FuzzyQuery

相似度检索

FuzzyQuery的构造方法:

FuzzyQuery(Termterm):

默认支持模糊字数为2;

FuzzyQuery(Termterm,intmaxEdits):

maxEdits:

模糊字数,[0,2]之间,若为0,相当于TermQuery。

FuzzyQuery(Termterm,intmaxEdits,intprefixLength):

prefixLength,指定要有多个前缀字母必须完全匹配。

5.2.6NumericRangeQuery

数字范围搜索(演示:

略),最后两个参数的含义是:

minInclusive,是否最小包含,maxInclusive,是否包含最大值

5.2.7MatchAllDocsQuery

查询所有

5.2.8BooleanQuery

组合查询

1、MUST和MUST表示“与”的关系,即“交集”,相当与AND。

2、MUST和MUST_NOT前者包含后者不包含。

3、MUST_NOT和MUST_NOT没意义

4、SHOULD与MUST表示MUST,SHOULD失去意义;

5、SHOULD与MUST_NOT相当于MUST与MUST_NOT。

6、SHOULD与SHOULD表示“或”的关系,相当与OR。

5.3更新和删除索引

6Lucene对结果排名和高亮

6.1结果排名

6.1.1Lucene文档的得分算法

idf举例:

有很多不同的数学公式可以用来计算TF-IDF。

这边的例子以上述的数学公式来计算。

词频(TF)是一词语出现的次数除以该文件的总词语数。

假如一篇文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是3/100=0.03。

一个计算文件频率(DF)的方法是测定有多少份文件出现过“母牛”一词,然后除以文件集里包含的文件总数。

所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是lg(10,000,000/1,000)=4。

最后的TF-IDF的分数为0.03*4=0.12。

6.1.2改变boost值来改变文档得分

boost,激励因子,默认值是1,可以手动更改。

我们可以设置boost值来改变搜索结果排名。

而且设置boost值后,该信息保存在Document文档的norm中。

6.1.3实现排名

6.2结果高亮

6.2.1概念

结果高亮:

对结果添加HTML标签,并通过css样式修饰。

6.2.2实现

7Jsoup

网页爬取工具

是一款java的html解析器,可直接解析某个Url地址,html文本内容,有一套非常省力的api可通过dom,css以及类似于jquery的操作方法取出和操作数据

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2