Lucene简介(二)

5 篇文章 0 订阅
0. 简介
  1. Lucene(即指 lucene-core.jar)提供“创建索引” 及基于索引进行搜索即 “搜索索引” 的功能。Lucene 并不是一个完整的搜索程序,它需要你自己使用它提供的 API 创建索引,构造 Query 对索引进行搜索,并处理搜索结果。流程示意图如下:
    Lucene流程
    首先对需要被索引的原始数据(例如 doc 文档,pdf 文件等等)进行过滤处理(提取文本数据),得到能被 Lucene 使用的文本数据,然后在文本数据中提取/创建元数据域(Field)以构建 Document,再对 Document 进行 Analysis 然后生成 Index 并使用 IndexWriter 写入到 Directory 。执行搜索时,将用户提交的查询语句构造成一个 Query,然后使用 IndexSearcher 执行搜索,并处理 / 返回搜索结果。

  2. 先看看如何使用 Lucene 创建索引(针对 Lucene 8.0.0)。创建索引的简单流程(伪代码)如下:

// directory : 一个地方用于存放索引文件,可以是文件系统目录
Directory index = new XXXDirectory();
// (重点)
// 分析器 :分析器对文档(Document)中的域(Field)进行分析,提取语汇单元
Analyzer analyzer = new XXXAnalyzer();
// 用于配置 indexWriter
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
// indexWriter : 用于创建和维护索引(写入索引)
IndexWriter writer = new IndexWriter(index, indexWriterConfig);
for(File file : files) {
	// document : 是创建和搜索索引的基本单位,
	// 可用于将多个 field 聚合在一起,以表示一个整体
	Document doc = new Document();
	// (重点)
	// field : 构成 document,
	// 每个 field 由三个部分组成:name / type / value
	Field fld = new XXXField(name, value, options);
	doc.add(fld);
	write.addDocument(doc);
}

其中,我认为最重要的是:怎样将被索引的文本数据分割成 文档(Document)和 域(Field),以及对域选项的设置(这会直接影响该域是否会被搜索程序搜索及在搜索结果中返回)。

  1. 搜索索引,简单流程如下:
Directory index = new XXXDirectory();
// 用于访问索引
IndexReader reader = new XXXReader(index);
// 用于搜索由 IndexWriter 类创建的索引
IndexSearcher searcher = new IndexSearcher(reader);
// 对查询语句进行分析
Analyzer analyzer = new XXXAnalyzer();
QueryParser parser = new QueryParser(name, analyzer);
// 查询对象
Query query = parser.parse(queryStringFromUser);
int hitsNum = N;
// 指向搜索结果即 匹配查询条件的文档(Document)
TopDocs topDocs = searcher.search(query, hitsNum);
ScoreDoc[] hits = topDocs.scoreDocs;
for(ScoreDoc t : hits){
	Document doc = searcher.doc(t.doc);
	Field fld = (Field) doc.getField(name);
}

其中,重点便是查询(Query)对象的构造了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值