首页 > 其他分享 >lucene 文件存储相关的几个类

lucene 文件存储相关的几个类

时间:2023-06-21 22:04:46浏览次数:59  
标签:文件 存储 http lucene 索引 文档 blog com FSDirectory

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

lucene 文件存储相关的几个类_搜索

  • 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.javaeye.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://hi.baidu.com/expertsearch/blog/item/2195a237bfe83d360a55a9fd.html

lucene学习(4)
http://liliang1222.javaeye.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

标签:文件,存储,http,lucene,索引,文档,blog,com,FSDirectory
From: https://blog.51cto.com/u_15588078/6532083

相关文章

  • 运行lucene 的Demo
    这是最简单的方式的lucene的Demo步骤,有稍稍的经验的都应该飘过。step1:下载并安装并配置JDK,具体方法参看我之前的博客:Java环境的搭建 step2: 下载并配置lucene,下载请去:http://labs.renren.com/apache-mirror/lucene/java/ 以我下载的lucene3.0.1为例,下载完后,我们......
  • .dbmdl 文件
    VS2010的数据库项目的会建一个<ProjectName>.dbmdl文件,这个文件,在每次数据库项目被打开时候,都会被更新,如果这个文件不存在,则会自动建立一个。这个文件不应该被源代码控制,否则你会被他搞死,每次打开项目,都会改写这个文件。<ProjectName>.dbmdl–Thisfileisthecachedproject......
  • 使用 Vim 给文件设置密码保护
    Vim 是一种流行的、功能丰富的和高度可扩展的 Linux文本编辑器,它的一个特殊功能便是支持用带密码各种的加密方法来加密文本文件。本文中,我们将向你介绍一种简单的Vim使用技巧:在 Linux 中使用Vim对文件进行密码保护。我们将向你展示如何让一个文件在它创建的时侯以及为了修......
  • sourcetree忽略文件
    SourceTree默认使用的是全局缓存配置,这个配置文件在SourceTree–>Preferences–>Git–>GlobalIgnoreList可以看到。如下图:如果想针对某个项目单独做,则请参考下面文章:http://www.ifeegoo.com/git-code-management-dot-gitignore-file-has-no-effect-solution.html 这时......
  • Unreal中ini配置文件的hierarchy
    ConfigUE的很多配置是通过ini文件实现的,相对于二进制文件来说,ini文件的优点是读取、阅读、修改都非常方便,因为所有的文本编辑器都可以修改。但是UE中的ini文件可谓是眼花缭乱,在Engine、project文件夹下,同样的Engine.ini可能存在baseengine.ini、defaultengine.ini、engine.ini,pla......
  • vscode打开文件在同一个tab的问题
    当我们单击或者cmd+鼠标左键单击打开文件时,有时候是在同一个窗口,有时候是新的窗口,这是啥样呢? 这是因为vscode有“预览模式”,当是预览模式时,打开的是当前窗口。如何判断是不是预览模式呢?看打开文件的tab标题是不是斜体,是斜体就是预览模式,再打开就是本窗口,   tab页标题是......
  • 如何从AWS中学习如何使用AmazonSimpleStorageService(S3)进行数据存储
    目录文章标题:32.《如何从AWS中学习如何使用AmazonSimpleStorageService(S3)进行数据存储》背景介绍:随着数据量的不断增加,数据存储的需求也越来越大。传统的数据存储方式已经无法满足现代应用程序的需求,因此,数据存储技术不断发展和创新,尤其是在云计算领域,各种存储解决......
  • Python - 生成指定大小的文件
    项目测试过程中需要上传不同大小的文件,一时难以找到这么多测试数据,网上查了下,可以使用Python来快速生成,方法如下方法1:使用特定大小的文本重复生成,指定一个文本字符串text,然后将其重复复制直至达到所需的文件大小。defgenerate_file(file_path,file_size_bytes):text=......
  • BAT批量更新一个文件下面多个仓库代码
    代码将下面的代码保存成一个bat文件@echooffchcp65001for/d%%iin(*)do(cd%%iifexist.git(echo进入%%i仓库,开始拉取最新代码...gitpullecho%%i仓库代码拉取完成!)cd..)echo所有仓库代码拉取完成!pause运行效......
  • (本地存储)localStorage
    1、存储数据 localStorage.setItem('name','张三')2、调取数据 localStorage.getItem('name')3、存储对象数据时需要用JSON.stringify()转换后再存储,调取时需要用JSON.parse()转换后在使用 存对象Obj constObj={        name:"张三", ......