`
lovnet
  • 浏览: 6705003 次
  • 性别: 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 API Docs 7.3.0 (CHM格式)

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎...

    lucene.net搜索技术,附带学习资料

    Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,看几个例子就会了,来回那一套儿,按部就班做几个实验就熟悉了。分析器是Lucence的精华,又分为分词和过滤两部分,而且中文分词...

    Java数据挖掘包JDMP0.1.1 jar文件

    例如,可以将几个矩阵组合成一个变量,如,一个时间序列。可以一个一个地访问这些矩阵,也可以作为一个单个的大型矩阵来进行访问。可以将几个变量组合成一个样本,如,在分类中有输入值和目标值的样本。许多样本可以...

    商场 购物车 秒杀 Kafka redis lucene等等,Spring Boot,vue,微信小程序 .zip

    爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    一款基于asp.net技术业内领先的Web2.0社区平台。

    本次优化主要体现在以下几个方面: 1.实现数据库读写分离,便于部署多台数据库服务器实现数据库负载均衡; 2.针对所有数据库查询语句进行优化,重写数据分页的存储过程,为大数据量及超大数据库做好准备; 3.缓存...

    SpaceBuilder v2.3 sp1 源码版.zip

    本次优化主要体现在以下几个方面:   1.实现数据库读写分离,便于部署多台数据库服务器实现数据库负载均衡;   2.针对所有数据库查询语句进行优化,重写数据分页的存储过程,为大数据量及超大数据库做好准备;...

    SpaceBuilder v2.3 sp1 安装版.zip

    本次优化主要体现在以下几个方面:   1.实现数据库读写分离,便于部署多台数据库服务器实现数据库负载均衡;   2.针对所有数据库查询语句进行优化,重写数据分页的存储过程,为大数据量及超大数据库做好准备;...

    基于SSM实现的招聘考试系统.zip

    爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP...

    一个简单的java爬虫产品

     这个产品,做到现在,我遇到了这么几个情况,有和大家分享的,也有向大家请教,求助的。  1.关于对应关系数据的保存方式  在创建索引的时候,需要将网页的URL和网页的内容传到相应的方法中,当然URL和内容是要...

    涵盖了90%以上的面试题

    new String(“abc”)创建了几个对象 String变量做“+”运算时的编译优化 "=="和equals方法究竟有什么区别 String,StringBuffer,StringBuilder有什么区别 java中的数组是不是对象 数组初始化的方式有哪几种 length...

    XML,XSLT,AJAX三大技术打造开源多用户博客X3BLOG

    X3-BLOG 遵从 GENERAL PUBLIC LICENSE(GPL) 开源协议,这意味着可以修改程序的一个或几个副本或程式的任何部分,以此形成基於这些程式的衍生作品。必须在修改过的档案中附有明显的说明:您修改了此一档案及任何修改...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics