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

简介: 理解索引过程中的核心类 执行简单索引的时候需要用的类有 IndexWriter、Directory、Analyzer、Document、Field 1、IndexWriter IndexWriter写索引是索引过程的核心组件这个类负责创建新的索引或者打开已有的索引以及向索引中添加、删除或

理解索引过程中的核心类

欢迎访问我的个人网站http://wuyudong.com/

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

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

目录
相关文章
|
1月前
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
|
4月前
|
数据采集 存储 搜索推荐
使用Python构建自定义搜索引擎:从数据抓取到索引与搜索
使用Python构建自定义搜索引擎:从数据抓取到索引与搜索
293 0
|
4月前
|
分布式计算 Java Hadoop
MapReduce编程:检索特定群体搜索记录和定义分片操作
MapReduce编程:检索特定群体搜索记录和定义分片操作
55 0
|
SQL 索引
白话Elasticsearch03- 结构化搜索之基于bool组合多个filter条件来搜索数据
白话Elasticsearch03- 结构化搜索之基于bool组合多个filter条件来搜索数据
290 0
|
机器学习/深度学习 自然语言处理 搜索推荐
「语义搜索」搜索引擎过时了,“寻找引擎”流行起来
「语义搜索」搜索引擎过时了,“寻找引擎”流行起来
|
自然语言处理 数据库 开发者
索引和搜索流程简介|学习笔记
快速学习索引和搜索流程简介
136 0
索引和搜索流程简介|学习笔记
|
存储 数据采集 自然语言处理
lucene 索引流程详细分析|学习笔记
快速学习 lucene 索引流程详细分析
134 0
lucene 索引流程详细分析|学习笔记
|
存储 自然语言处理 运维
搜索lucene概念扫盲
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本篇回归基础,从概念介绍起。
131 0
|
存储 自然语言处理 关系型数据库
Lucene的查询过程
Lucene的查询过程
187 0
|
自然语言处理 小程序 搜索推荐
小程序搜索服务优化最佳实践
小程序的诞生大大缩短了操作步骤以及省去了APP之间的切换成本,如何提升用户体验,促使更多流量变现,是大部分开发者们不断探索优化的方向。本文透过小程序“搜索服务的优化”的角度,结合了阿里云开放搜索的最佳实践,解读如何2步实现一站式高质量搜索体验~
3360 0
小程序搜索服务优化最佳实践