`
BuN_Ny
  • 浏览: 82870 次
  • 来自: 济南
社区版块
存档分类
最新评论

20) 第二章 索引:缓冲

 
阅读更多

 

Lucene在添加或删除文档时,并不会立即将这些操作写入磁盘,而是在内存中先做缓存。毋庸置疑,这是针对IO性能问题而作出的优良策略。

  在三种情况下,Lucene会对缓冲区进行flush操作:

  1. 缓存区内存空间已满

    通过IndexWriter的setRAMBufferSizeMB()设置缓冲区大小。默认为16.0MB。值得注意的是,内存大小的设定并非绝对精确,因而你不可以依赖此大小做程序设计。另外,不要将它设置超过2048MB!

  2. 文档数到达上限

    通过IndexWriter的setMaxBufferedDocs()设置最大文档数。默认情况下是没有这个限制的。

  3. 删除的Term数到达上限

    通过IndexWriter的setMaxBufferedDeleteTerms()设置最大删除Term数。默认情况下是没有这个限制的。

  如果你不需要这些设置,将他们设成IndexWriter.DISABLE_AUTO_FLUSH,不过你不可以同时将1、2两条设成DISABLE_AUTO_FLUSH.

  顺便一提,我们应该已经发现Lucene的IndexWriter构造器过于复杂,需要的参数让人觉得乱七八糟,参数的设置也是让人一头雾水。Lucene团队已经注意到这个问题了,新版的Lucene会将这些“乱七八糟”的东西都放在一个IndexWriterConfig类中,IndexWriter将仅仅需要一个IndexWriterConfig的实例进行构造。相应的,上面介绍的三种方法也会被移动到IndexWriterConfig中,IndexWriter.DISABLE_AUTO_FLUSH常量也由IndexWriterConfig.DISABLE_AUTO_FLUSH替代。

 

  最后说一下flush操作。该操作会在Directory中创建新的段(segment)和待删除文件(上一节说的那个“黑名单”)。然而,在执行commit()操作前,这些文件对于IndexReader是完全不可见的。flush操作是释放缓冲区的内存空间到index文件中,commit操作则是将所有的flush变动持久化并对IndexReader可见。

 

 

 

 

1
0
分享到:
评论

相关推荐

    清华版labview教程

    第二章 程序结构 2.1 循环结构 2.1. 1 While 循环 2.1.2 移位寄存器 2.1.3 For循环 2.2 分支结构:Case 2.3 顺序结构和公式节点 2.3.1 顺序结构 2.3.2 公式节点 第三章 数据...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    第11章 索引 421 11.1 Oracle索引概述 422 11.2 B*树索引 423 11.2.1 索引键压缩 426 11.2.2 反向键索引 429 11.2.3 降序索引 435 11.2.4 什么情况下应该使用B*树索引? 437 11.2.5 B*树小结 448 11.3 位图...

    SQLServer2008查询性能优化 2/2

    第9章 执行计划缓冲分析 218 9.1 执行计划生成 218 9.1.1 解析器 219 9.1.2 代数化器 220 9.1.3 优化 221 9.2 执行计划缓冲 227 9.3 执行计划组件 227 9.3.1 查询计划 227 9.3.2 执行上下文 227 9.4 执行...

    SQLServer2008查询性能优化 1/2

    第9章 执行计划缓冲分析 218 9.1 执行计划生成 218 9.1.1 解析器 219 9.1.2 代数化器 220 9.1.3 优化 221 9.2 执行计划缓冲 227 9.3 执行计划组件 227 9.3.1 查询计划 227 9.3.2 执行上下文 227 9.4 执行...

    DirectX 9 3D游戏程序设计入门 中文版

    第二章 渲染管线 (The Rendering Pipeline) 54 目标 54 2.1表现模型 54 2.1.1 顶点格式 55 2.1.2 三角形 56 2.1.3 索引 57 2.2虚拟照相机 57 2.3 渲染管线 58 2.3.1自身坐标系(Local Space) 59 2.3.2世界坐标系...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第二章 用户和权限 一、 用户介绍 ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或...

    LINUX设备驱动第三版_588及代码.rar

    第二章 构造和运行模块 设置测试系统 Hello World模块 核心模块与应用程序的对比 编译和装载 内核符号表 预备知识 初始化和关闭 模块参数 在用户空间编写驱动程序 快速参考 第三章 字符设备驱动程序 ...

    python cookbook(第3版)

    第二章:字符串和文本 2.1 使用多个界定符分割字符串 2.2 字符串开头或结尾匹配 2.3 用Shell通配符匹配字符串 2.4 字符串匹配和搜索 2.5 字符串搜索和替换 2.6 字符串忽略大小写的搜索替换 2.7 最短匹配模式...

    UNIX网络编程 卷2:进程间通信

     第二部分 消息传递  第4章 管道和FIFO 32  4.1 概述 32  4.2 一个简单的客户-服务器例子 32  4.3 管道 32  4.4 全双工管道 37  4.5 popen和pclose函数 39  4.6 FIFO 40  4.7 管道和FIFO的额外属性 44  ...

    Visual Basic绘图程序设计 任德记编著

    第二章 平面图形设计 第一节 VisualBasic的图形功能 一、图形控件 二、图片控件 三、坐标系 四、绘图方法 五、绘图颜色 六、绘图属性 七、在图形区输出字符串 第二节 图形显示程序设计的基本方法 一、图形显示程序...

    informix 实用大全

    第二部分 lnpormlx sql 第8章 生成数据库与表格 8.1 规划磁盘布局与存储要求 8.2 使用语法符号 8.3 生成数据库 8.4 删除数据库 8.5 生成表格 8.6 删除表格 8.7 改变表格 8.8 更多信息 8.9 ...

    Sybase ASE 15.7 开发文档:系统管理指南(卷二)

    Sybase ASE 15.7 开发文档:系统管理指南(卷二)共两卷 第 1 章 限制对服务器资源的访问 第 2 章 镜像数据库设备 第 3 章 配置内存 第 4 章 配置数据高速缓存 第 5 章 管理多处理器服务器 第 6 章 创建和管理用户...

Global site tag (gtag.js) - Google Analytics