Web-第二十八天 Lucene&solr使用一悟空教程

Posted Java帮帮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web-第二十八天 Lucene&solr使用一悟空教程相关的知识,希望对你有一定的参考价值。


Web-第二十八天 Lucene&solr使用一【悟空教程】

Web-第二十八天 Lucene&solr使用一【悟空教程】

Lucene/Solr

课程目录

1. 搜索介绍

2. Lucene介绍

3. 全文检索流程介绍

a) 索引流程

b) 搜索流程

4.  Lucene入门程序

a) 索引实现

b) 使用Luke查看索引

c) 搜索实现

5. 分词器

a) 分词介绍

b) 中文分词

c) IK分词器

6. LuceneField(重点)

7. Lucene的索引库维护

8. Lucene的搜索

a) Query子对象

b) QueryParser

9. Lucene相关度排序(扩展)

10. solr介绍

11. solr安装配置


1. 搜索介绍

1.1. 实现搜索的方案

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

Web-第二十八天 Lucene&solr使用一【悟空教程】

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

但是数据量过多时,数据库的压力就会变得很大,查询速度会变得非常慢。我们需要使用更好的解决方案来分担数据库的压力。

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

Web-第二十八天 Lucene&solr使用一【悟空教程】

为了解决数据库压力和速度的问题,我们的数据库就变成了索引库,我们使用LuceneAPI的来操作服务器上的索引库。这样完全和数据库进行了隔离。

 

1.2. 数据查询方法

1.2.1. 顺序扫描法

所谓顺序扫描,例如要找内容包含一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。

这种方法是顺序扫描方法,数据量大就搜索慢。

 

1.2.2. 倒排索引

先举一个栗子:

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

 

现在有两篇文档:

Doc1: When in Rome, do as the Romans do.

Doc2: When do you come back from Rome?

 

Lucene会对以上两篇文档建立倒排索引

索引结构如下图:

Web-第二十八天 Lucene&solr使用一【悟空教程】

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

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

 

1.1. 搜索技术应用场景

应用场景 

1.单机软件的搜索(word中的搜索)

2.站内搜索 (baidu贴吧、论坛、 京东、 taobao

3.垂直领域的搜索 (818工作网)

4.专业搜索引擎公司 (googlebaidu

 

2. Lucene介绍

2.1. 什么是全文索引

计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式

 

2.2. 什么是Lucene

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 html 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene 能够几乎适用于所有的搜索应用程序。

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

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

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

 

2.3. Lucene与搜索引擎的区别

全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统,包括建立索引、处理查询返回结果集、增加索引、优化索引结构等功能。例如:百度搜索、eclipse帮助搜索、淘宝网商品搜索等。

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

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