Lucene总的来说是:

  • 一个高效的,可扩展的,全文检索库。
  • 全部用Java实现,无须配置。
  • 仅支持纯文本文件的索引(Indexing)和搜索(Search)。
  • 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。

在Lucene in action中,Lucene 的构架和过程如下图,

说明Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。

让我们更细一些看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函数的简单调用。

然而当进入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的总体架构相关推荐

  1. Lucene学习总结之七:Lucene搜索过程解析

    一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: ...

  2. Lucene学习总结之六:Lucene打分公式的数学推导

     Lucene学习总结之六:Lucene打分公式的数学推导 在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索 ...

  3. Lucene学习总结之三:Lucene的索引文件格式(1)

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  4. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  5. Lucene学习总结之四:Lucene索引过程分析

    对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...

  6. Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser

    一.Lucene的查询语法 Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html (1) 语法关键字 + ...

  7. Lucene学习总结之五:Lucene段合并(merge)过程分析

    一.段合并过程总论 IndexWriter中与段合并有关的成员变量有: HashSet<SegmentInfo> mergingSegments = new HashSet<Segm ...

  8. Lucene学习总结之三:Lucene的索引文件格式(2)

    2019独角兽企业重金招聘Python工程师标准>>> 四.具体格式 上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向 ...

  9. 【CUDA编程】学习笔记(二) GPU硬件架构

    一.CPU与GPU的链接模型 在计算机的硬件架构中,CPU与GPU有多种链接模式,下面介绍几种典型的架构 北桥 多CPU(SMP) 多CPU(NUMA) 多CPU(NUMA)多总线 具有集成PCI E ...

最新文章

  1. 使用Python+OpenCV构建文档扫描程序
  2. linux常见命令汇总
  3. HDU 4406 最大费用最大流
  4. 表单提交中Get和Post方式的区别及EncType表明提交数据的格式详解
  5. Git使用中的一些奇技淫巧
  6. Fragment Or DialogFragment Can not perform this action after onSaveInstanceState
  7. Java中的垃圾回收器的类型概述 《对Java的分析总结》(六)
  8. centos 卸载vsftp
  9. 斯坦福 CS228 概率图模型中文讲义 六、变量消除
  10. 【硬件解码系列】之DXVA2
  11. HCIE-Security Day30:IPSec:实验(五)配置基于路由的IPSec PN(采用预共享密钥认证)
  12. spring boot 邮件端口_不会吧,SpringBoot还能发送邮件发送邮件?快来看看如何操作吧...
  13. 2018年4月蓝桥杯省赛经历
  14. 诺基亚Nokia的PC套件导出短信乱码问题解决(转)
  15. cuda 10.1 下载
  16. Ubuntu 18.04安装c++版OpenCV4
  17. prop-types详解
  18. Sqlite 索引的使用、索引的优缺点
  19. Vue之鼠标悬停显示页面加载时间
  20. 经验分享!java程序员面试十多家公司后的经验心得

热门文章

  1. 【简单易懂】getBean(id)和getBean(Class)使用的区别
  2. 运行jmap时弹出:Usage: jmap [option] <pid> (to connect to running process) jmap [option] <
  3. 18行代码解决:(C语言)L1-046 整除光棍 (20分)
  4. NumpyPandas的区别和联系
  5. android 4.0 电话录音,ANDROID音频系统散记之四:4.0音频系统HAL初探
  6. 两个条件一个为false就运行_设置一个自动运行网格条件单
  7. SQL语句的添加、删除、修改多种方法
  8. 世界上有三样东西不能相信(引用)心胸狭窄的男人勿看
  9. linux目录表及功能n鸟哥,鸟哥linux学习之-资料与目录管理
  10. 扫雷游戏网页版_做游戏,单人行动可行吗(3.让我试试扫雷)