`
lovnet
  • 浏览: 6880844 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

lucene 文件存储相关的几个类

阅读更多

lucene 文件存储相关的几个类,以及他们的派生关系如下图:

image

  • Directory 代表了 Lucene 的索引的存储的位置,这是一个抽象类。
  • DbDirectory 存储到 Berkeley DB 4.3 的实现,Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。
  • JEDirectory 存储到 Berkeley DB Java Edition (JE) 的实现, Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。
  • FileSwitchDirectory,多个目录存储索引,注意:这个API先不要用,因为API文档注明过有可能在将来的版本进行修改。
  • 如果数据量不大,可以直接使用RAMDirectory,毕竟在内存中,数据的访问会更快。RAMDirectory还有一个地方比较常用,那就是单元测试,可以在初始化测试方法时创建索引,测试完成后删除索引,这样就不会留下不必要的垃圾文件。 RAMDirectory 转 FSDirectory 可以参看这篇文章:http://vincent-feng.iteye.com/blog/205832
  • FSDirectory,它表示一个存储在文件系统中的索引的位置;这也是一个抽象类。
  • SimpleFSDirectory 这个类是对FSDirectory的一个简单实现,一般的系统都是使用这个Directory对象进行操作的。
  • NIOFSDirectory 与FSDirectory一样,将文件存放在文件系统中,不同的地方是它利用的java.nio.*来读取文件,当多线程来读取同一文件时,不用像FSDirecotyr使用锁机制。
  • MMapDirectory 与FSDirectory一样,将文件存放在文件系统中,不同的地方是它不是利用io来操作文件,而是利用内存映射。

lucene 的 CHANGES.txt 文件中有如下说明:

21. LUCENE-753: Added new Directory implementation org.apache.lucene.store.NIOFSDirectory, which uses java.nio's FileChannel to do file reads. On most non-Windows platforms, with many threads sharing a single searcher, this may yield sizable improvement to query throughput when compared to FSDirectory, which only allows a single thread to read from an open file at a time. (Jason Rutherglen via Mike McCandless)

注意:官方不推荐在 windows 开台下用 NIOFSDirectory ,因为 windows 下 java 的 NIO 有个 bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6265734

Lucene的并发性规则:

操作 是否允许
对同一个索引运行多个并行的搜索进程 允许
对一个正在生成、被优化或正在与另一索引合并的索引运行多个并行的搜索进程,或该索引正在进行删除、更新文档等操作时,对索引运行多个并行的搜索进程 允许
对同一个索引用多个IndexWriter对象执行添加、更新文档的操作 不允许
当一个从索引中删除文档的IndexReader对象没有成功关闭时,打开一个IndexWriter对象用于在这个索引中添加新的文档 不允许
IndexWriter对象向索引中添加新文档后,未成功关闭;在此之后,打开一个IndexReader对象用于从这个索引中删除文档 不允许

参考资料:

如何提高Lucene的搜索速度
http://www.cnblogs.com/live41/archive/2009/12/31/1636900.html
http://hi.baidu.com/expertsearch/blog/item/2195a237bfe83d360a55a9fd.html

lucene学习(4)
http://liliang1222.iteye.com/blog/513734

lucene/solr FSDirectory NIOFSDirectory 性能测试对比与Http11NioProtocol
http://blog.chenlb.com/2009/05/lucene-solr-fsdirectory-niofsdirectory-performance-and-http11nioprotocol.html

Java Lucene (3):锁机制
http://dev.firnow.com/course/3_program/java/javajs/2008224/100826.html

Lucene--Directory解析
http://hi.baidu.com/dangjun625/blog/item/9cd9012ea9473e5a4fc226f6.html

分享到:
评论

相关推荐

    Lucene索引文件查看工具lukeall4.7.1

    LukeAll 4.7.1的核心功能主要集中在以下几个方面: 1. **索引目录选择**:用户可以直接通过双击运行lukeall-4.7.1.jar文件,启动工具后,选择待查看的Lucene索引目录。这个功能使得开发者无需编写额外的代码就能...

    Lucene.Net 文件检索doc,xls,ppt,txt,pdf文件(实例)

    它主要包括以下几个核心组件: 1. **索引**: Lucene.Net通过创建索引来存储和组织数据,索引是一个高效的结构,允许快速的文本查询。在我们的案例中,每个文档(如doc、xls等)都会被转换成一个或多个索引条目。 2...

    Lucene加庖丁解牛测试类

    在“Lucene加庖丁解牛测试类”中,我们可以从以下几个方面进行实践: 1. **索引构建**:测试类应包含创建索引的代码,这通常涉及Analyzer的选择(如StandardAnalyzer)、Document的构建以及IndexWriter的使用。...

    lucene 全包 包括源码

    Lucene 的源码分为几个主要部分,包括分析(Analyzer)、索引(Index)、查询(Query)、搜索(Search)和文档处理(Document)。这些模块共同构成了Lucene的基本架构。 1. 分析(Analyzer):Analyzer是处理文本...

    springmvc集成lucene全文搜索

    在Spring MVC中集成Lucene,通常包括以下几个步骤: 1. **引入依赖**:在项目中添加Lucene的相关依赖,通常通过Maven或Gradle来管理。确保引入的Lucene版本与Spring MVC项目兼容。 2. **创建索引**:定义一个服务...

    lucene小实例文件检索

    在Lucene中,文件检索主要涉及以下几个核心概念: 1. **索引(Index)**:在Lucene中,索引是将非结构化的文本数据转化为可搜索的结构化表示的过程。通过分词器(Tokenizer)将文本拆分成词语(Token),然后创建倒...

    lucene的一个实用例子

    Lucene 包含以下几个关键组件: 1. **索引(Index)**:Lucene 的工作基于索引,而非实时查询数据库。索引是对文档内容进行分析、分词并存储的一个数据结构,类似于书籍的目录,可以快速定位到相关信息。 2. **...

    lucene3源码分析

    Lucene的索引文件格式是其高效检索性能的基础,主要包括以下几个方面: - **基本概念**:介绍Lucene索引文件的基本术语和概念。 - **基本类型**:定义了索引文件中使用的数据类型。 - **基本规则**:阐述了文件格式...

    lucene索引查看工具及源码

    通过阅读和学习 Luke 的源码,我们可以了解到如何与 Lucene 索引进行交互,以及索引结构是如何组织和存储的。 在提供的压缩包 "luke-3.3.0" 中,包含了 Luke 工具的旧版本。这个版本可能不支持最新的 Lucene 版本,...

    lucene查询工具类和IndexSearcher分页查询示例

    在这个过程中,我们需要注意几个关键点: - `pageSize`定义了每页显示的文档数量。 - `page`表示当前页码,用于计算开始索引。 - `startIndex`是查询应返回的文档范围的起始位置。 - `topDocs`包含查询结果的总命中...

    Lucene.2.0.API

    在Lucene 2.0中,主要的知识点包括以下几个核心模块: 1. **索引模块**:这是Lucene的基础,用于构建和管理全文索引。主要包括`IndexWriter`类,用于创建、更新和删除索引;`Analyzer`类,用于文本分析,将输入的...

    lucene-3.6.0

    Lucene的API设计简洁明了,主要分为以下几个部分: 1. **索引API**:包括IndexWriter、IndexReader、Term和Document等类,用于创建、读取和修改索引。 2. **查询API**:Query、BooleanQuery、PhraseQuery等类,...

    详解SpringBoot+Lucene案例介绍

    要使用Lucene,我们需要在pom文件中引入相关依赖。这些依赖包括: * lucene-core:Lucene的核心包,提供了基本的索引和搜索功能。 * lucene-queryparser:提供了查询解析的功能,用于将用户输入的查询语句转换为...

    lucene学习总结

    Lucene的索引文件主要包括以下几个部分: - **段(Segment)**:是Lucene的基本存储单元,每个段包含一组文档和对应的倒排索引。段是不可变的,新的文档会被添加到新的段中,旧的段会被合并以优化存储和检索效率。 ...

    LUCENE的搜索引擎例子

    2. **索引存储**:索引构建完成后,Lucene会将其保存到磁盘上,形成一种倒排索引结构,便于快速查找包含特定词汇的文档。索引文件包括字段信息、词典、Posting List等。 3. **查询处理**:当用户在前端输入查询时,...

    Lucene.Net-search

    Lucene.Net 的核心架构主要包括以下几个组件: 1. **文档(Document)**:代表要索引的信息单元,可以包含多个字段(Field),如标题、内容、作者等。 2. **字段(Field)**:是文档的组成部分,每个字段有特定的...

    lucene2.0.0

    Lucene 2.0.0的主要API包括以下几个关键类: 1. **IndexWriter**:用于创建和更新索引,管理索引段的合并。 2. **Directory**:表示存储索引的物理位置,如FSDirectory用于文件系统,RAMDirectory用于内存。 3. *...

    lucene3.6.1学习

    在学习 Lucene 源码时,理解以下几个关键概念至关重要: 1. **倒排索引**:这是 Lucene 的核心数据结构,它存储了每个术语出现的所有文档及其位置信息,使高效的全文搜索成为可能。 2. **Analyzer**:分析器负责将...

    lucene实现全文搜索

    在Lucene中,实现全文搜索涉及到以下几个关键概念: 1. **Document**:是Lucene中表示索引目标的基本单元,可以代表一个文件、一条记录或任何可被索引的数据。开发者可以通过`Document`对象来组织要索引的信息。 2...

Global site tag (gtag.js) - Google Analytics