第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念:

1.Lucene由两部分组成:索引和搜索。索引是通过对原始数据的解析,形成索引的过程;而搜索则是针对用户输入的查找要求,从索引中找到匹配的内容,并表示出来。

2.索引组件的工作顺序是:原始内容--->获取内容(比如利用网络爬虫,这时取得的还是原始内容,只不过是自己想要的原始内容)--->建立文档(这里就是lucene的索引组件真正开始工作的地方了,解析内容变成lucene自己的document)--->文档分析(利用lucene的各种分析器,analyzer,将文档解析为各种语汇单元)--->形成文档索引(IndexWriter,存储在Directory中)

3.搜索组件的工作顺序是:从用户搜索界面获得用户搜索请求--->建立查询(这是lucene的搜索组件开始工作的地方,建立Query)--->搜索查询(利用indexSearcher,使用Query,在索引所在的Directory中进行搜索处理,并获得匹配的结果topdocs)--->展现结果(用直观的,客户喜欢接受的方式,展现给用户)

4.索引过程的核心类:

IndexWriter:写索引,用于创建新索引或者打开已有索引

Directory:索引的存储位置。这是一个抽象类,因此实际使用的是其子类:FSDirectory(文件系统,存储在非易失设备中), RAMDirectory(内存中)

Analyzer:分析器,从被索引的对象(文档)中提取语汇单元。如果被索引的对象不是纯文本,则先转换成文本文档。分析器的分析对象是文档(Document)。Analyzer也是一个抽象类,实际使用的是其子类。

Document:文档。lucene将原始内容转换成lucene自己能识别的对象,就是这里的Document。Document由各个Field组成,可以认为Document就是包含多个Field对象的容器。

Field:域,由域名和域值组成,还有记录此域如何被存储(store),如何被索引(index)的选项。一个域名可以带多个域值。

5.搜索的核心类

IndexSearcher:可以理解为和IndexWriter是对应的。它是用来搜索由IndexWriter代表的索引的。实际搜索就是调用IndexSearcher对象的search(query对象,要返回的评分最高的文档数量n)方法

Term:字面意思就是术语,它是搜索功能的基本单元,和Field类似,也由域名和域值组成。我是这么理解的:Field和Term的组成相同(至少相似吧)。Field用于索引;而Term用于搜索

Query:查询类,也是一个抽象类,实际用的是其多个子类。Query子类对象的产生方式,目前我总结有两种:一种是通过QueryParser对象的parse(用户输入的查询方式字符串)方式得到;另一种是通过new TermQuery(new Term(域名字符串,域值字符串))来得到。

TermQuery:书上说是lucene提供的最基本的查询类型。用来匹配指定域中包含特定值的文档。不过我目前理解,它就是从term得到query的中间转换的桥梁。

TopDocs:IndexSearcher对象调用search(query对象,要返回的评分最高的文档数量n)方法后的返回值。通过这个对象,可以获得totalHits(匹配搜索条件的实际文档数量),scoreDocs(一个包括搜索结果的scoreDoc对象数组,通过组元素又可以得到具体文档)以及其他参数。

6.我自己认为:还有一个类也是比较核心的,就是IndexReader

《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索的更多相关文章

  1. 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析

    通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...

  2. 《Lucene in Action 第二版》第三章节的学习总结----IndexSearcher以及Term和QueryParser

    本章节告诉我们怎么用搜索.通过这章节的学习,虽然搜索的内部原理不清楚,但是至少应该学会简单的编写搜索程序了本章节,需要掌握如下几个主要API1.IndexSearcher类:搜索索引的门户,发起者. ...

  3. 《Lucene in Action第二版》学习总结---如何在Windows下编译luceneinAction2Edition源码包

    1. 下载此源码包,位置是: www.manning.com/hatcher3,得到:lia2e.tar.gz,然后解压缩得到目录:lia2e,为了以后能辨识,我将此目录改名为:luceneinAct ...

  4. lucene简介 创建索引和搜索初步

    lucene简介 创建索引和搜索初步 一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引 ...

  5. Lucene.net 从创建索引到搜索的代码范例

    关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB ...

  6. 《TomCat与Java Web开发技术详解》(第二版) 第一章节的学习总结--HTTP组成+基本访问方式

    1.需要看懂HTML文件中的组成元素的基本含义.不同的组成元素,可以使得HTML支持文本,图片(img,将图片发给客户端),静态音频/视频(embed src,将音频视频发给客户端),超链接(href ...

  7. lucene实战(第二版)学习笔记

    初识Lucene 构建索引 为应用程序添加搜索功能 Lucene的分析过程

  8. python基础教程第二版 第一章

    1.模块导入python以增强其功能的扩展:三种方式实现 (1). >>> Import math >>> math.floor(32.9) 32.0 #按照 模块 ...

  9. 《HBase in Action》 第一章节的学习总结 ---- HBase是个啥

    1.HBase模仿了Google的BigTable,是一种开源的,面向列族的数据库.它基于行键(rowkey),列键(column key)和时间戳(TimeStamp)来建立索引.HBase是建立在 ...

随机推荐

  1. ESLint 的使用和.eslintrc.js配置

    在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先制定编码规范.使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量. ESLint 简介 ESLint 由 Ja ...

  2. HashSet、LinkedHashSet和TreeSet

    关键技术: HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的.存入HashSet的对象必须定义hashCode方法. TreeSet采用红黑树的数据结构进行排序元素,使用它可以从Se ...

  3. 用swift开发自己的MacOS锁屏软件(二)

    上一篇中尝试写了hello world,这一篇中,开始尝试锁屏功能 1.尝试查找swift有没有相关的函数,可以控制系统锁屏之类的,结果并没有找到 2.尝试查找cocoa有没有相关的接口,结果仍然没有 ...

  4. 理解Promise简单实现的背后原理

    在写javascript时我们往往离不开异步操作,过去我们往往通过回调函数多层嵌套来解决后一个异步操作依赖前一个异步操作,然后为了解决回调地域的痛点,出现了一些解决方案比如事件订阅/发布的.事件监听的 ...

  5. object references an unsaved transient instance - save the transient instance before flushing异常问题处理

    一.异常:org.hibernate.TransientObjectException: object references an unsaved transient instance - save ...

  6. Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log

    1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...

  7. spring boot 引用外部配置文件

    java -jar xx.jar -Dspring.config.location=/data/apps/xx/application-prod.properties

  8. Selenium-java-Log4j环境搭建

    1.导入Log4j 2.Build Path 3.在/src/main/resource目录下创建文件,命名为 log4j.properties 4.文件的内容是,  直接复制  ### 设置根 定义 ...

  9. 2017.3.31 spring mvc教程(八) <mvc:annotation-driven />所做的工作

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  10. Java基础- super 和 this 解析

    1. superkeyword表示超(父)类的意思.this变量代表对象本身. 2. super訪问父类被子类隐藏的变量或覆盖的方法.当前类假设是从超类继承而来的,当调用super.XX()就是调用基 ...