理解索引过程中的核心类

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

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个排名的搜索结果,搜索结果即匹配查询条件的文档

转载于:https://www.cnblogs.com/wuyudong/p/5391434.html

理解Lucene索引与搜索过程中的核心类相关推荐

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

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

  2. [RL] 深入理解Tabular Leaning (MC/TD) 过程中的梯度下降使用

    深入理解Tabular Leaning过程中的梯度下降使用: i.e. Tabular Leaning:TD/MC/DP 梯度下降: GD/SGD/Semi-GD 在强化学习中,众多Tabular算法 ...

  3. 深入理解MySQL索引和优化丨MySQL的核心原理

    索引介绍 文章相关视频讲解: C/C++ Linux服务器开发高级架构学习视频点击:C/C++Linux服务器开发/Linux后台架构师-学习视频 理解mysql-索引及其优化 MySQL的核心原理分 ...

  4. JAVA文件搜索过程中如何得到各种文件内容(office文件,PDF,邮件,mht,思维导图等)

    现在流行的搜索引擎 Lucene, Elasticsearch处理文件搜索时一般使用 tika,使用tika 处理文件正文搜索还好,但搜索结果显示正文等操作不是很方便,并且tika提取正文的速度比较慢 ...

  5. LeetCode-题目详解(十一):回溯算法【递归回溯、迭代回溯】【DFS是一个劲往某一个方向搜索;回溯算法建立在DFS基础之上,在搜索过程中,达到结束/裁剪条件后,恢复状态,回溯上一层,再次搜索】

    这里写目录标题 一.概述 1.深度优先遍历(DFS) 和回溯算法区别 2. 何时使用回溯算法 3.回溯算法步骤 4.回溯问题的类型 二.LeetCode案例 39. 组合总和 40. 组合总和II 7 ...

  6. mysql创建索引以及进程过程中出现的问题

    今天临近下班同事发现线上访问非常卡.show processlist;发现经过查询发现是mysql进程数太多了,1400多条进程,其中有处于等待的,删除临时表的. 原来是因为一个表索引的问题 sele ...

  7. linux 编译过程中acx_pthread.m4类错误解决办法

    在GNU开源软件包中经常会看到configure.ac或者confiugre.in文件.(关于gnu auto build system 以后我再贴出来).在这两个文件中经常会出现 ACX_PTHRE ...

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

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

  9. 深入理解空间搜索算法 ——数百万数据中的瞬时搜索

    转自 干货|深入理解空间搜索算法 --数百万数据中的瞬时搜索 全球人工智能:专注为AI开发者提供全球最新AI技术动态和社群交流.用户来源包括:北大.清华.中科院.复旦.麻省理工.卡内基梅隆.斯坦福.哈 ...

最新文章

  1. Mac的访达中,如何只搜索当前文件夹的内容?
  2. oracle中 游标实例
  3. 关于mysql的定时任务
  4. find = in a string
  5. 《计算机视觉:模型、学习和推理》一3.6 正态逆伽马分布
  6. Eclipse创建Maven父子项目
  7. vue对象深拷贝_JS 对象的深拷贝和浅拷贝
  8. C++笔记------数据类型
  9. HDU 1730 Northcott Game
  10. 用 Python 实现电影订票系统 | 内附源码
  11. ubuntu16.04使用umake安装pycharm-professional
  12. outlook邮箱如何群发邮件?outlook群发邮件如何相互之间看不到?
  13. html生日祝福心形,心形生日祝福QQ空间个性留言代码_送你的
  14. 稳压器功能一览[转]
  15. 深圳市福田区支持文化创意产业发展若干措施
  16. adb 清理内存_adb命令查看手机应用内存使用情况
  17. 中国石油大学《化工设计概论》第二阶段在线作业
  18. 都有哪些数据恢复软件是免费的?
  19. DELL电脑开机自检提示please run setup program
  20. 如何在Word中添加漂亮的代码块 | 很全的方法整理和比较

热门文章

  1. 在不影响配置下,清除netscreen密码
  2. ospf路由汇总的目的
  3. mac 制作usb启动盘_如何使用Mac制作Windows 10 USB-从Mac终端构建可启动的ISO
  4. python timber_如何使用Timber更有效地记录日志
  5. react创建组件_如何使用React创建时间轴组件
  6. wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享
  7. 安装Python第三方库的三个方法
  8. 学习java三个技巧要知道!
  9. 在mac下搭建java开发环境
  10. servlet必知细节(二)--servlet执行过程