首页 > 其他分享 >Lucene 源代码剖析-9索引是如何存储的

Lucene 源代码剖析-9索引是如何存储的

时间:2023-03-27 10:31:46浏览次数:44  
标签:5.1 lucene Lucene 索引 Directory org 源代码 apache store


Lucene 源码剖析

5           索引是如何存储的

  

5.1   数据存储类Directory

   

    Directory及相关类负责文档索引的存储。

      

     

5.1.1       org.apache.lucene.store.Directory

   

一个Directory对象是一系列统一的文件列表(a flat list of files)。文件可以在它们被创建的时候一次写入,一旦文件被创建,它再次打开后只能用于读取(read)或者删除(delete)操作。并且同时在读取和写入的时候允许随机访问(random access)。

  

在这里并不直接使用Java I/O API,但是更确切地说,所有I/O操作都是通过这个API处理的。这使得读写操作方式更统一起来,如基于内存的索引(RAM-based indices)的实现(即RAMDirectory)、通过JDBC存储在数据库中的索引、将一个索引存储为一个文件的实现(即FSDirectory)。

  

Directory的锁机制是一个LockFactory的实例实现的,可以通过调用Directory实例的setLockFactory()方法来更改。

  

 

Lucene 源代码剖析-9索引是如何存储的_抽象类

  

5.1.2       org.apache.lucene.store.FSDirectory

   

FSDirectory类直接实现Directory抽象类为一个包含文件的目录。目录锁的实现使用缺省的SimpleFSLockFactory,但是可以通过两种方式修改,即给getLockFactory()传入一个LockFactory实例,或者通过调用setLockFactory()方法明确制定LockFactory类。

  

目录将被缓存(cache)起来,对一个指定的符合规定的路径(canonical path)来说,同样的FSDirectory实例通常通过getDirectory()方法返回。这使得同步机制(synchronization)能对目录起作用。

  

 

Lucene 源代码剖析-9索引是如何存储的_lucene_02

  

5.1.3       org.apache.lucene.store.RAMDirectory

   

RAMDirectory类是一个驻留内存的(memory-resident)Directory抽象类的实现。目录锁的实现使用缺省的SingleInstanceLockFactory,但是可以通过setLockFactory()方法修改。

  

 

Lucene 源代码剖析-9索引是如何存储的_apache_03

 

   

5.1.4       org.apache.lucene.store.IndexInput

   

IndexInput类是一个为了从一个目录(Directory)中读取文件的抽象基类,是一个随机访问(random-access)的输入流(input stream),用于所有Lucene读取Index的操作。BufferedIndexInput是一个实现了带缓冲的IndexInput的基础实现。

  

 

Lucene 源代码剖析-9索引是如何存储的_lucene_04

   

5.1.5       org.apache.lucene.store.IndexOutput

   

IndexOutput类是一个为了写入文件到一个目录(Directory)中的抽象基类,是一个随机访问(random-access)的输出流(output stream),用于所有Lucene写入Index的操作。BufferedIndexOutput是一个实现了带缓冲的IndexOutput的基础实现。RAMOuputStream是一个内存驻留(memory-resident)的IndexOutput的实现类。

   

 

Lucene 源代码剖析-9索引是如何存储的_lucene_04

   




 

标签:5.1,lucene,Lucene,索引,Directory,org,源代码,apache,store
From: https://blog.51cto.com/u_2650279/6151325

相关文章

  • Mysql索引底层数据结构与算法、Explain
    为什么建议InnoDB表必须建主键?并且推荐使用整型的自增主键?如果不由我们人工去创建主键,mysql也会帮我们去建立主键,没有必要把这么简单地工作交给Mysql。整型比较比UUID比......
  • 聊聊索引
    简介MySQL是最流行的关系型数据库之一,索引是MySQL中最重要的性能优化技术之一。通过优化索引可以显著提升查询性能,降低查询的时间复杂度。本文将介绍MySQL索引的类型、不......
  • SAP UI5 响应式表格 sap.m.Table 根据不同宽度的屏幕动态决定显示或隐藏 Column 的实
    写作动机本教程前一篇文章,笔者已经用一个实际的例子,解答了教程一位学习者对sap.m.Table的响应式布局特性的疑问:SAPUI5应用开发教程之一百七十-澄清一些对SAPUI5......
  • 索引构建
    背景面向C端用户的在线核心搜索系统底层采用ES作为核心“存储/检索”引擎,搜索作为用户购买决策的核心链路的一部分,对系统的可靠性要求tp9999,对查询性能要求极高(召回+排序......
  • Oracle 创建索引
    创建索引一般分为在线索引和非在线索引,在线与非在线的区别:非在线锁表,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML......
  • 开源代码审计系统 Swallow 内测发布
    一背景这个月的主要目标是检验蜻蜓的编排系统和优化,我基于蜻蜓开发dolphin的ASM系统,这两周主要开发代码审计系统swallow.Swallow是一款开源的代码审计工具,其底层集成......
  • 微服务 初始 分布式搜索引擎 Elastic Search
    文章目录⛄引言一、什么是ElasticSearch?二、ElasticSearch倒排索引⛅正向索引⚡倒排索引⛄正向和倒排三、ES的一些概念⛅文档和字段⚡索引和映射四、MySQL与Elasticsea......
  • TDengine3.0源代码编译安装
    从官方文档来看TDengine3.0的编译方法和TDengine2.0没有什么区别,2.0的编译见《通过源代码编译安装TDengine》。官方文档:https://github.com/taosdata/TDengine/blob/......
  • oracle数据库表索引空间不够
    oracle数据库表索引空间不够步骤1:检查索引空间使用情况首先,需要检查数据库的索引空间使用情况,以确定是否存在空间不足的问题。可以使用以下SQL语句查询当前索引空间的使......
  • 最强分布式搜索引擎——ElasticSearch
    最强分布式搜索引擎——ElasticSearch本篇我们将会介绍到一种特殊的类似数据库存储机制的搜索引擎工具——ESelasticsearch是一款非常强大的开源搜索引擎,具备非常多强大......