《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索
第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念:
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》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索的更多相关文章
- 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析
通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...
- 《Lucene in Action 第二版》第三章节的学习总结----IndexSearcher以及Term和QueryParser
本章节告诉我们怎么用搜索.通过这章节的学习,虽然搜索的内部原理不清楚,但是至少应该学会简单的编写搜索程序了本章节,需要掌握如下几个主要API1.IndexSearcher类:搜索索引的门户,发起者. ...
- 《Lucene in Action第二版》学习总结---如何在Windows下编译luceneinAction2Edition源码包
1. 下载此源码包,位置是: www.manning.com/hatcher3,得到:lia2e.tar.gz,然后解压缩得到目录:lia2e,为了以后能辨识,我将此目录改名为:luceneinAct ...
- lucene简介 创建索引和搜索初步
lucene简介 创建索引和搜索初步 一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引 ...
- Lucene.net 从创建索引到搜索的代码范例
关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB ...
- 《TomCat与Java Web开发技术详解》(第二版) 第一章节的学习总结--HTTP组成+基本访问方式
1.需要看懂HTML文件中的组成元素的基本含义.不同的组成元素,可以使得HTML支持文本,图片(img,将图片发给客户端),静态音频/视频(embed src,将音频视频发给客户端),超链接(href ...
- lucene实战(第二版)学习笔记
初识Lucene 构建索引 为应用程序添加搜索功能 Lucene的分析过程
- python基础教程第二版 第一章
1.模块导入python以增强其功能的扩展:三种方式实现 (1). >>> Import math >>> math.floor(32.9) 32.0 #按照 模块 ...
- 《HBase in Action》 第一章节的学习总结 ---- HBase是个啥
1.HBase模仿了Google的BigTable,是一种开源的,面向列族的数据库.它基于行键(rowkey),列键(column key)和时间戳(TimeStamp)来建立索引.HBase是建立在 ...
随机推荐
- Binary Tree Maximum Path Sum - LeetCode
Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...
- luogu P1145 约瑟夫
题目描述 n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人.现在有一圈人,k个好人站在一起,k个坏人站在一起.从第一个好人开始数数.你要确定一个最小 ...
- InputSplit—>RecordReder—>map(key,value,context)的过程解析
上图首先描述了在TaskTracker端Task(MapTask.ReduceTask)的执行过程,MapTask(org.apache.hadoop.mapred)首先被TaskRunner调用,然 ...
- 弹出视图/弹出模态presentViewController与presentModalViewController
一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...
- Android Developer -- Bluetooth篇 开发实例之四 API详解
http://www.open-open.com/lib/view/open1390879771695.html 这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每 ...
- 链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI11" 指示该对象没有列,或当前用户没有访问该对象的权限。
原文:链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI11" 指示该对象没有列,或当前用户没有访问该对象的权限. SELECT * F ...
- Matlab中find函数陷阱
a = [ 1 2 3 3 3]; 如果a==3 返回[ 0 0 1 1 1]; find(a==3) 返回[3 4 5],这才是想要的下标.
- source insight研究——快捷键篇
转:http://blog.csdn.net/ison81/article/details/3510426 关于键盘和鼠标谁更快捷之争,是一个永远被程序员争论的话题.我想大多数人都不会极端的信奉一种操 ...
- HashMap在高并发下引起的死循环
HashMap事实上并非线程安全的,在高并发的情况下,是非常可能发生死循环的,由此造成CPU 100%,这是非常可怕的.所以在多线程的情况下,用HashMap是非常不妥当的行为,应採用线程安全类Con ...
- vs2012 webservice创建
第一步:打开VS2012,新建空项目,注意选择.NET Framework的版本.这里我选择的是.NET Framework 4 新建好项目后,在项目中添加一个WebService项 打开这个文件,我 ...