理解索引过程中的核心类

执行简单索引的时候需要用的类有:

IndexWriter、ƒDirectory、ƒAnalyzer、ƒDocument、ƒField

1、IndexWriter

IndexWriter(写索引)是索引过程的核心组件,这个类负责创建新的索引,或者打开已有的索引,以及向索引中添加、删除或更新被索引文档的信息,但不能读取或搜索索引。IndexWriter需要开辟一定的空间来存储索引,该功能由Directory完成

2、Directory

/** A Directory is a flat list of files. Files may be written once, when they
* are created. Once a file is created it may only be opened for read, or
* deleted. Random access is permitted both when reading and writing.
*
* <p> Java's i/o APIs not used directly, but rather all i/o is
* through this API. This permits things such as: <ul>
* <li> implementation of RAM-based indices;
* <li> implementation indices stored in a database, via JDBC;
* <li> implementation of an index as a single file;
* </ul>
*
* Directory locking is implemented by an instance of {@link
* LockFactory}, and can be changed for each Directory
* instance using {@link #setLockFactory}.
*
*/

Directory描述了索引的存放位置,是一个抽象类,其子类负责具体指定索引的存放路径

3、Analyzer

Analyzer由IndexWriter构造方法指定,负责从被索引的文本文件中提取词汇,Analyzer是一个抽象类,由其子类完成相关的功能

4、Document

代表一些域(Field)的集合,Lucene只能从二进制文档中提取以Field实例形式的文本

5、Field

一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等,都可以保存在不同的域里。

理解索引与搜索过程中的核心类

Lucene提供的搜素接口一样很简单易懂:

IndexSearcher、Term、Query、TermQuery、TopDocs

1、IndexSearcher

IndexSearcher用于搜索由IndexWriter类创建的索引,它需要Directory实例来掌控前期创建的索引,然后才能提供大量的搜索方法。最简单的搜索方法是将单个的Query对象和int topN计数作为该方法的参数,并返回一个TopDocs对象,该方法的一个典型应用如下:

Directory dir = FSDirectory.open(new File("/tmp/index"));
IndexSearcher searcher = new IndexSearcher(dir);
Query q = new TermQuery(new Term("contents", "lucene"));
TopDocs hits = searcher.search(q, 10);
searcher.close();

2、Term

Term对象是搜索功能的基本单元。在搜索过程中可以创建Term对象,和TermQuery对象一起使用:

Query q = new TermQuery(new Term("contents", "lucene"));
TopDocs hits = searcher.search(q, 10);

上面代码的含义是寻找content域中包含lucene的前10个文档,并按照降序排列

3、Query

lucene中包含很多具体的Query(查询)子类。TermQuery、BooleanQuery、PhraseQuery、PrefixQuery、 PhrasePrefixQuery、TermRangeQuery、NumericRangeQuery、 FilteredQuery、SpanQuery
4、TermQuery

TermQuery是lucene中最基本的查询类型,用来匹配指定域中包含特定项的文档

5、TopDocs

TopDocs类是一个简单的指针容器,指针一般指向前N个排名的搜索结果,搜索结果即匹配查询条件的文档

理解Lucene索引与搜索过程中的核心类的更多相关文章

  1. lucene索引并搜索mysql数据库[转]

    由于对lucene比较感兴趣,本人在网上找了点资料,终于成功地用lucene对mysql数据库进行索引创建并成功搜索,先总结如下: 首先介绍一个jdbc工具类,用于得到Connection对象: im ...

  2. Mysql高手系列 - 第22篇:深入理解mysql索引原理,连载中

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第22篇. 背景 使用mys ...

  3. 在学习c++过程中,总结类的三个用户以及使用权限,感觉非常实用

    首先我们需要知道类的三个用户分别是:类的实现者,类的普通用户和类的继承者(派生类),接下来分别讲解这几种用户的区别. 1 .类的实现者:顾明思议,就是类的设计者,拥有最大的权限,可以访问类中任何权限的 ...

  4. cocos2d-x学习笔记1——Cocos2D-x 中的核心类

    Cocos2D-x 引擎的设计思路是将游戏的各个部分抽象成几个概念,包括导演.场景.布景层和人物精灵,它们之间的关系如图3-1 所示: 导演(CCDirector): 顾名思义,导演类是游戏中的组织者 ...

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

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

  6. Lucene学习总结之七:Lucene搜索过程解析 2014-06-25 14:23 863人阅读 评论(1) 收藏

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

  7. 深入Lucene索引机制

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

  8. Lucene 索引功能

    Lucene 数据建模 基本概念 文档(doc): 文档是 Lucene 索引和搜索的原子单元,文档是一个包含多个域的容器. 域(field): 域包含“真正的”被搜索的内容,每一个域都有一个标识名称 ...

  9. lucene索引

    一.lucene索引 1.文档层次结构 索引(Index):一个索引放在一个文件夹中: 段(Segment):一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能产生新段,不同的段可以合并成一 ...

随机推荐

  1. Netty5 + Protobuf 使用

    1. 安装开发环境 1.1 Netty环境 这里我使用Netty5.0.0版本 到这里下载即可http://netty.io/ 下载netty-all-5.0.0.Alpha2.jar 这个jar包简 ...

  2. [转]查看手机已经记住的WIFI密码

    有时用过wifi后记住密码了,但再想知道wifi密码是多少,怎么办呢.下面的方法为你解决这样的问题. 1.手机必须取得root权限. 2.用RE管理器或es文件浏览器进入data/misc/wifi, ...

  3. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  4. How can I exclude directories from grep -R?

    ‘--exclude-dir=dir’ Exclude directories matching the pattern dir from recursive directory searches. ...

  5. yousa_team团队项目 兼职平台 完成展示

    我们团队的团队项目是一个大学生兼职网站,商家可以在网站上发布信息,学生对相应的岗位进行预约,然后根据信誉度来表示用户的信誉,整个平台由管理员监控, 包括修改错误信息,修改用户信誉度,删除过期信息,接受 ...

  6. Xcode-显示代码行数

    在Xcode菜单中选择Preferences命令,单击Text Editing选项图标,选中Linenumbers复选框.(快捷键苹果键+逗号打开preferences --> Text Edi ...

  7. CentOS6.5菜鸟之旅:安装VirtualBox4.3

    一.下载VirtualBox的RHEL软件库配置文件 cd /etc/yum.repos.d wget http://download.virtualbox.org/virtualbox/rpm/rh ...

  8. Sprint第三个冲刺(第二天)

    一.Sprint介绍 任务进度: 二.Sprint周期 看板: 燃尽图:

  9. 解决tomcat was unable to start within问题

    这个问题可能大家都熟悉,以前碰到这个问题,重新启动一次eclipse就好了,随着我的一个项目的增大,我发现这种情况越来越多,到底是怎么回事? 出现这个情况的原因有两个,要么是你的数据库连接connec ...

  10. 面向对象的Javascript(5):继承

    在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求 良好的用户体验的网站中,如SNS,就会 用到大量的JavaScrpt,有时JavaScrip ...