`
yuxingfirst
  • 浏览: 50563 次
  • 性别: Icon_minigender_1
  • 来自: 湘潭
社区版块
存档分类
最新评论

Lucene02----整体架构

 
阅读更多

 

Lucene的总体架构

 

 

Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点

 

 

 

Lucene 的各组件

 

 

  被索引的文档用Document对象表示。

   IndexWriter通过函数addDocument将文档添加到索引中,实现创建索引的过程。

   Lucene的索引是应用反向索引。

   当用户有请求时,Query代表用户的查询语句。

   IndexSearcher通过函数search搜索Lucene Index

 

  IndexSearcher计算term weightscore并且将结果返回给用户。

 

 

Lucene API 的调用实现索引

File path = new File("G:/index");
if (!path.exists()) {
		path.mkdir();
}
//索引文件保存的目录
Directory d = FSDirectory.open(path);
//词法分析及语言处理组件
Analyzer analyzer = new StandardAnalyzer(DEFAULT_VERSION);
//保存有关IndexWriter的所有配置信息
IndexWriterConfig conf = new IndexWriterConfig(DEFAULT_VERSION,
					analyzer);
//创建以及维护一个索引的IndexWriter
IndexWriter indexWriter = new IndexWriter(d, conf);


//要简历索引的目录
File indexFileDir = new File("G:/SearchDir");
File[] files = indexFile.listFiles();
for (File file : files) {
			if (file.isDirectory()) {
					fileIndexerProcessor(writer, file);
				} else {
					Document document = new Document();
		document.add(new Field("text", new FileReader(file)));
					writer.addDocument(document);
				}
		}
//在一个索引上执行优化操作
indexWriter.optimize();
//提交在一个索引上所做的所有改变以及关闭关联的文件。要注意这是一个昂贵的操作,要尝试重用单个IndexWriter实例而不是关闭和重新创建
indexWriter.close();
 

 

搜索过程

File indexDir = new File("G:/index");	
//索引文件存放的目录
	Directory dir = FSDirectory.open(indexDir);
 	//IndexReader是一个抽象类,提供了访问一篇索引的接口
	IndexReader reader = IndexReader.open(dir); 
	//在单个IndexReader搜索的实现,通常,应用程序只需要调用继承的 search(Query,int) or search(Query,Filter,int) 方法,为了更好的性能,当你的索引没有修改的情况下,一般最好在多个搜索上共享一个IndexReader实例,而不是每一次搜索都新创建一个。如果你的索引被修改了并且你希望看到这些修改对搜索结果的影响,应该使用IndexReader.reopen() 来获取一个新的reader然后用它创建一个新的IndexSearcher。
	IndexSearcher searcher = new IndexSearcher(reader);
    //Analyzer创建了解析文本的TokenStreams,它代表了一种从文本中提取索引项的方针
	Analyzer analyzer = new StandardAnalyzer(DEFAULT_VERSION);
	//QueryParse对查询语句行进分析,有JAVACC生成,最重要的方法就是parse(String);
	QueryParser parser = new QueryParser(DEFAULT_VERSION, "text",
					analyzer);
    //QueryParser 调用parser 进行语法分析,形成查询语法树,放到Query 中
	Query query = parser.parse("Romanian,Bulgarian");
	//TopDocs代表搜索所获得的命中的结果数
	TopDocs hits = searcher.search(query, null, 10);
		System.out.println(hits.totalHits);
 

 

此图是上一节介绍的全文检索的流程对应的Lucene 实现的包结构

Lucene analysis 模块主要负责词法分析及语言处理而形成Term

Luceneindex模块主要负责索引的创建,里面有IndexWriter

Lucenestore模块主要负责索引的读写。

Lucene QueryParser主要负责语法分析。

Lucenesearch模块主要负责对索引的搜索。

0
1
分享到:
评论

相关推荐

    lucene-highlighter-2.2.0-src.zip

    同时,源码的学习也能帮助我们更好地掌握Lucene的整体架构,提高在实际项目中的应用能力。 总之,`lucene-highlighter-2.2.0-src.zip`提供的源码是一个宝贵的教育资源,对于想要深入了解Lucene高亮显示机制的开发者...

    lucene.net2.9.1-2.9.2及相关学习资料

    2. **Lucene.NET架构**:解析Lucene.NET的整体架构,包括索引的构建、查询的执行、结果的排序等模块。 3. **API使用**:详述如何使用Lucene.NET的API进行索引创建、查询操作、结果处理等实践操作。 4. **性能调优**...

    面试指南-Lucene:ES篇.md

    - **冷热分离架构设计**:将热点数据和冷数据分开存储,提高整体性能。 以上内容涵盖了Lucene和Elasticsearch中的关键知识点,从倒排索引的基本原理到具体的性能调优技巧,旨在帮助读者全面掌握这两款强大工具的...

    Lucene in Action 2nd_Edition.doc

    - **总体架构**:本章节详细介绍了典型搜索应用程序的整体架构,并探讨了Lucene如何在此类架构中发挥作用。 - **组成部分**:强调Lucene仅是一个搜索库,用户还需要处理搜索应用的其他组件(如爬虫、文档过滤、运行...

    lucene学习总结

    Lucene的整体架构** Lucene的架构主要包括以下几个组件: - **Analyzer**:负责对输入的文本进行分词和标准化处理,生成可供索引的术语。 - **IndexWriter**:构建和更新索引,管理段的创建、合并和删除。 - **...

    Lucene的使用与优化

    通过本文,我们深入了解了Lucene的关键组件和它们的作用,包括Analyzer、Document、Field、Term、Segment等,同时还介绍了Lucene的整体架构和组成部分。此外,还提供了一个简单的示例代码,帮助读者理解如何使用...

    java大数据内容_7Flume、Kafka、Sqoop、Lucene

    - 优化架构设计,提高系统的整体性能和可扩展性。 ##### 1.1.2 Flume 核心概念 - **Event**:Flume 数据传输的基本单元,由可选的 header 和载有数据的 bytearray 构成。Header 包含一系列 key-value 字符串对,...

    开发自己的搜索引擎-Lucene 2.0+Heritrix

    Lucene是Apache软件基金会的一个项目,它是一个全文检索库,提供了一个强大的搜索功能的基础架构。它不仅支持基本的全文检索,还包含高级的搜索特性,如布尔查询、短语查询、模糊查询和近似查询。Lucene的核心组件...

    lucene并行索引

    2. **架构设计**:设计基于Lucene的分布式并行索引架构,包括数据分片策略、计算节点配置、数据传输方案等。 3. **实现细节**:开发具体的代码实现,如文档分割逻辑、节点间通信协议、合并索引算法等。 4. **测试...

    lucene5.5.0源码

    在深入研究Lucene 5.5.0的源码之前,我们需要先理解其基本架构和核心概念。 1. **基本架构**:Lucene主要由索引和查询两大部分构成。索引部分负责将文档内容转化为可搜索的结构,查询部分则解析用户的输入并返回...

    lucene3.0 in action

    本书首先介绍了典型搜索应用的整体架构,强调了Lucene在其中发挥的作用。理解这一点至关重要,因为Lucene本质上只是一个搜索库,而一个完整的搜索应用还需要包括爬虫、文档过滤、运行时服务器、用户界面、管理等多个...

    java(结合lucene)版的公交搜索系统-javaso.zip

    在这个系统中,Lucene扮演了核心的搜索功能角色,而Java则作为开发平台和编程工具,为系统提供了稳定的基础架构和丰富的功能扩展。 首先,我们要理解Lucene是什么。Lucene是Apache软件基金会的一个开源项目,它是一...

    Lucene+Heritrix 源码

    在实际开发过程中,你可能需要深入研究源码中的 `ch7`、`ch9` 和 `ch2` 文件,了解它们在整体架构中的作用和具体实现细节。 通过学习和理解这两个项目的源码,不仅可以提升对搜索引擎原理的理解,还能掌握如何利用...

Global site tag (gtag.js) - Google Analytics