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

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. view hex value in MR

    cat filename | hexdump  –C tail  -行数 filename | hexdump  –C head -行数 filename | hexdump -C

  2. (转)NSArray类的使用

    NSArray的基本应用总结 NSString *string1 = @"two"; NSString *string2 = @"one"; //创建数组 NS ...

  3. 将一个txt里的A和B谈话内容获取出来并分别保存到A和B的txt文件中

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream;import java.io.Fi ...

  4. 前端中 width 的获取

    这篇文章其实是在了解 viewport 的过程中发现这些概念容易混淆做了个小小的总结.viewport的首要关键是宽度的获取,宽度的计算有下面几个属性和方法: clientWidth offsetWi ...

  5. [POJ 2397] Spiderman

    Link: POJ 2397 传送门 Solution: 设$dp[i][j]$表示第$i$步走到$j$高度时经过的最高高度 分向上走和向下走两种方式转移即可 注意记录路径,最后输出时要逆序输出 (逆 ...

  6. 值得收藏:一份非常完整的MySQL规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  7. 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-切入点(pointcut)API

    本文翻译自Spring.NET官方文档Version 1.3.2. 受限于个人知识水平,有些地方翻译可能不准确,但是我还是希望我的这些微薄的努力能为他人提供帮助. 侵删. 让我们看看 Spring.N ...

  8. Javascript中的原型链、prototype、__proto__的关系

    javascript  2016-10-06  1120  9 上图是本宝宝用Illustrator制作的可视化信息图,希望能帮你理清Javascript对象与__proto__.prototype和 ...

  9. EditText中输入信息的限制的方法

    应用场景 在Android应用中有时需要EditText中只允许输入约定的一些字符,禁止输入其他字符.这里列举了一些可能的应用场景. 1. 场景一 在通讯录保存好友信息界面中填写好友的电话号码时,应当 ...

  10. JSONUtil.bean2Json()报Property 'key' of class has no read method. SKIPPED的问题处理

    错误警告信息描述: net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:) Property 'handler' of class ...