免费的Lucene 原理与代码分析完整版下载
Lucene是一个基于Java的高效的全文检索库。
那么什么是全文检索,为什么需要全文检索?
目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据。很容易理解,结构化数据是有固定格式和结构的或者有限长度的数据,比如数据库,元数据等。非结构化数据则是不定长或者没有固定格式的数据,如图片,邮件,文档等。还有一种较少的分类为半结构化数据,如XML,HTML等,在一定程度上我们可以将其按照结构化数据来处理,也可以抽取纯文本按照非结构化数据来处理。
非结构化数据又称为全文数据。,对其搜索主要有两种方式:
- 顺序扫描法(SerialScanning):顾名思义,要找内容包含某一个字符串的文档,就挨着文档一个个找,对照每一个文档从头到尾,一直扫描,指导扫描完所有的文档。类似于Windows中搜索文件的功能。
- 第二种则为索引。就是从非结构化数据中提取出信息重新组织,使其变得有一定的组织,从而提高检索效率。比如我们的电话簿,从电话簿中查找联系人,我们根据首字母拼音可以索引定位到某一个联系人。
先建立索引在对索引进行搜索的过程就叫做全文检索(Full-text Search)。下图为全文检索的一般过程,也是Lucene检索的过程。
我的博客:CODE大全:www.codedq.net;业余草:www.xttblog.com;爱分享:www.ndislwf.com或ifxvn.com。
Lucene总的来说是:
- 一个高效的,可扩展的,全文检索库。
- 全部用Java实现,无须配置。
- 仅支持纯文本文件的索引(Indexing)和搜索(Search)。
- 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。
在Lucene in action中,Lucene 的构架和过程如下图,
说明Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。
我的博客:CODE大全:www.codedq.net;业余草:www.xttblog.com;爱分享:www.ndislwf.com或ifxvn.com。
让我们更细一些看Lucene的各组件:
- 被索引的文档用Document对象表示。
- IndexWriter通过函数addDocument将文档添加到索引中,实现创建索引的过程。
- Lucene的索引是应用反向索引。
- 当用户有请求时,Query代表用户的查询语句。
- IndexSearcher通过函数search搜索Lucene Index。
- IndexSearcher计算term weight和score并且将结果返回给用户。
- 返回给用户的文档集合用TopDocsCollector表示。
那么如何应用这些组件呢?
让我们再详细到对Lucene API 的调用实现索引和搜索过程。
- 索引过程如下:
- 创建一个IndexWriter用来写索引文件,它有几个参数,INDEX_DIR就是索引文件所存放的位置,Analyzer便是用来对文档进行词法分析和语言处理的。
- 创建一个Document代表我们要索引的文档。
- 将不同的Field加入到文档中。我们知道,一篇文档有多种信息,如题目,作者,修改时间,内容等。不同类型的信息用不同的Field来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。其中FileReader的SRC_FILE就表示要索引的源文件。
- IndexWriter调用函数addDocument将索引写到索引文件夹中。
- 搜索过程如下:
- IndexReader将磁盘上的索引信息读入到内存,INDEX_DIR就是索引文件存放的位置。
- 创建IndexSearcher准备进行搜索。
- 创建Analyer用来对查询语句进行词法分析和语言处理。
- 创建QueryParser用来对查询语句进行语法分析。
- QueryParser调用parser进行语法分析,形成查询语法树,放到Query中。
- IndexSearcher调用search对查询语法树Query进行搜索,得到结果TopScoreDocCollector。
以上便是Lucene API函数的简单调用。
我的博客:CODE大全:www.codedq.net;业余草:www.xttblog.com;爱分享:www.ndislwf.com或ifxvn.com。
然而当进入Lucene的源代码后,发现Lucene有很多包,关系错综复杂。
然而通过下图,我们不难发现,Lucene的各源码模块,都是对普通索引和搜索过程的一种实现。
此图是上一节介绍的全文检索的流程对应的Lucene实现的包结构。(参照http://www.lucene.com.cn/about.htm中文章《开放源代码的全文检索引擎Lucene》)
- Lucene的analysis模块主要负责词法分析及语言处理而形成Term。
- Lucene的index模块主要负责索引的创建,里面有IndexWriter。
- Lucene的store模块主要负责索引的读写。
- Lucene的QueryParser主要负责语法分析。
- Lucene的search模块主要负责对索引的搜索。
- Lucene的similarity模块主要负责对相关性打分的实现。
了解了Lucene的整个结构,我们便可以开始Lucene的源码之旅了。
免费的Lucene 原理与代码分析完整版下载地址:lucene原理与代码分析完整版pdf下载。
免费的Lucene 原理与代码分析完整版下载相关推荐
- Lucene 原理与代码分析完整版
原文地址为: Lucene 原理与代码分析完整版 Lucene 原理与代码分析系列文章已经基本告一段落,可能问题篇还会有新的更新. 完整版pdf可由以下链接下载. Lucene 原理与代码分析完整版 ...
- 【分享】lucene原理与代码分析完整版PDF
如题 很好的博客,分享一下.点击原文链接即可
- Lucene原理与代码分析(高手博客备忘)
2019独角兽企业重金招聘Python工程师标准>>> 随笔 - 69 文章 - 77 评论 - 687 随笔分类 - Lucene原理与代码分析 Lucene 4.X 倒排索引 ...
- Lucene原理与代码分析解读笔记
Lucene是一个基于Java的高效的全文检索库. 那么什么是全文检索,为什么需要全文检索? 目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据.很容易理解,结构化数据是有固定格式和结 ...
- 搜索:刘超的博客及《Lucene 原理与代码分析》
https://www.cnblogs.com/forfuture1978/archive/2011/09/10/2172918.html
- 对dpdk的rte_ring实现原理和代码分析
对dpdk的rte_ring实现原理和代码分析 前言 dpdk的rte_ring是借鉴了linux内核的kfifo实现原理,这里统称为无锁环形缓冲队列. 环形缓冲区通常有一个读指针和一个写指针.读指针 ...
- TrueCrypt 6.2a原理及代码分析
TrueCrypt 6.2a原理及代码分析 3 comments 25th Apr 10 rafa 1 项目物理布局 Project |____ Boot /* MBR部分的代码 */ ...
- 【剑指offer】Java版代码(完整版)
参考链接 [剑指offer]Java版代码(完整版)
- ios开发视频 Swift开发视频教程完整版下载
Swift ios开发视频教程完整版下载(共四季) --下载地址 Swift代码语言教程简介: 在刚刚过去的WWDC2014大会上,苹果公司新发布了一种编程语言Swift.据悉,Swift语言继承了C ...
最新文章
- python 路径往上一层_Python常用模块之模块、包介绍和相关语法
- VS2017 性能优化方法
- 分享关于搭建高性能WEB服务器的一篇文章
- MySQL行转列完整SQL示例
- Node.js Up and Runing 学习日记(八)
- 短信宝 php使用,[php] 使用 短信宝 发送短信(thinkphp)
- 用VC写Assembly代码(1)
- php英文书籍在线,php英语四级在线练习系统
- Spring Security 学习之X.509认证
- 神经网络用英文怎么说,神经网络算法的英文
- c语言汉字属于什么类型_C语言为什么需要定义数据类型
- Mybatis plus 修改密码
- 微信表情符号已写入判决书
- php doctrine 使用,php – 在Symfony中使用Doctrine创建表
- 安卓端录像并将视频分享给微信好友
- 怎么用python画房子_python绘图作业:使用pygame库画房子
- 哪一种验证方法最好?形式验证、硬件加速还是动态仿真?
- 局域网内建立http server
- 小数点化分数的过程_小数怎么化成分数
- Android.bp入门教程
热门文章
- 啊屋童装商城android,我们采访了100位漂亮妈妈 她们手机里居然都有一款叫啊屋童装商城的app...
- 说说2020年3个最关键的技术趋势,得先机者,得天下机会唾手可得
- 利用ZjDroid对 捕鱼达人3 脱壳及破解过程
- 北京移动动感地带收费项目个人使用总结
- NSGA2_python
- 【docker】软链接安装Docker到非系统盘(如D盘),并更改镜像位置
- 基于web的人才招聘信息系统的设计与实现
- 安徽省淮北市谷歌卫星地图下载
- class-dump 和 iOSOpenDev 的使用
- 天津大学计算机博士几年毕业,在职读博士几年毕业?