IndexWriter

Hibernate的SessionFactory
在Hibernate中。一般保持一个数据库就仅仅有一个SessionFactory。由于在SessionFactory中维护二级缓存,而SessionFactory又是线程安全的。

所以SessionFactory是共享的。

lucene的IndexWriter
假设同一时候在一个索引库中同一时候建立两个IndexWriter,比如:
      IndexWriter indexWriter = new IndexWriter(LuceneUtils.directory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);IndexWriter indexWriter2 = new IndexWriter(LuceneUtils.directory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);

这种代码会出现异常
而lucene的文件夹结构:

.会出现write.lock这个文件。

由于当一个IndexWriter在进行读索引库操作的时候,lucene会为索引库。以防止其它IndexWriter訪问索引库而导致数据不一致,直到IndexWriter关闭为止。

结论:同一个索引库仅仅能有一个IndexWriter进行操作。
封装IndexWriter的类LuceneIndexWriter 
public class LuceneIndexWriter {private static IndexWriter indexWriter = null;public static IndexWriter getIndexWriter() {if (indexWriter == null) {try {indexWriter = new IndexWriter(LuceneUtils.directory,LuceneUtils.analyzer, MaxFieldLength.LIMITED);} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}return indexWriter;}public static void close() {if (indexWriter != null) {try {indexWriter.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} else {System.out.println("indexWriter为空。不能关闭!

"); } } }

注:这里用单例模式做比較好。

/*** 1、索引库的增、删、改是由indexWriter来操作的* 2、同一个时刻内。同一个索引库。仅仅能同意一个indexWriter操作* 3、当IndexWriter创建完毕以后。indexwriter所指向的索引库就被占据了,仅仅有当indexWriter.close时。才干释放锁的资源* 4、当一个新的indexWriter想拥有索引库时。原来的indexWriter必须释放锁* 5、仅仅要索引库中存在write.lock文件。说明上锁了* 6、indexWriter.close有两层含义:*     *  关闭IO资源*     *  释放锁* @author Administrator**/
public class IndexWriterTest {@Testpublic void testIndexWriter() throws Exception{IndexWriter indexWriter = new IndexWriter(LuceneUtils.directory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);indexWriter.close();IndexWriter indexWriter2 = new IndexWriter(LuceneUtils.directory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);}
}

索引库的优化

当运行创建索引多次时。索引库的文件如图所看到的:(索引里内容是一样的)
从图中能够看出来,每运行一次就生成一个cfs文件。当运行delete操作时,会生成如图所看到的的结构:
从图中能够看出来。lucene在运行删除的时候,是先把要删除的元素形成了一个文件del文件,然后再和cfs文件进行整合得出最后结果。
结论:假设添加、删除重复操作非常多次,就会造成文件大量添加。这样检索的速度也会下降。所以我们有必要去优化索引结构。使文件的结构发生改变从而提高效率。

手动合并文件

合并多个小文件为一个大文件,降低IO操作:
在indexWriter.close();前加上
indexWriter.optimize();
就可以
在运行完上述代码后,索引库的结构为:
能够看出把该合并的项都合并了。把del文件彻底所有删除掉了。

自己主动合并文件

indexWriter.setMergeFactor(3);

当cfs文件的数量为3个时,这是会自己主动合并成一个文件。
假设没有设置数量,默认情况下为10;

转载于:https://www.cnblogs.com/blfshiye/p/5272222.html

lucene_indexWriter说明、索引库优化相关推荐

  1. mysql字段简索引_MySQL优化看这一篇就够了

    本文概要 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 ...

  2. leyou商城day7 构建商品索引库及查询

    01.商品搜索:商品搜索思路分析 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvaGMkTU-1657680854733)(assets/商品搜索过程.jpg)] ...

  3. MySQL索引性能优化

    01.MySQL:性能优化方案 在应用开发的过程中,由于前期数据量少,开发人员编写的SQL语句或者数据库整体解决方案都更重视在功能上的实现,但是当应用系统正式上线后,随着生成数据量的急剧增长,很多SQ ...

  4. MySQL索引系列--索引的优化--LIKE模糊查询

    原文网址:MySQL索引系列--索引的优化--LIKE模糊查询_IT利刃出鞘的博客-CSDN博客 简介         本文介绍MySQL的LIKE模糊查询索引的优化.主要是索引失效的解决方案. 索引 ...

  5. mysql索引与优化

    2019独角兽企业重金招聘Python工程师标准>>> 第二章.索引与优化 1.选择索引的数据类型 MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响.通常来说 ...

  6. Mysql 索引优化分析_如何优化MySQL的性能?从索引方面优化案例分析

    今天我们来讲讲如何优化MySQL的性能,主要从索引方面优化. 建表 //建表 CREATETABLEIFNOTEXISTSstaffs( idINTPRIMARYKEYAUTO_INCREMENT, ...

  7. lucene索引文件大小优化小结

    lucene索引文件大小优化小结 1 数值数据类型索引优化 1.1 数值类型索引问题 lucene本质上是一个全文检索引擎而非传统的数据库系统,它基于倒排索引,非常适合处理文本,而处理数值类型却不是强 ...

  8. mysql查询索引like_mysql 索引与优化like查询

    索引与优化like查询 1. like %keyword    索引失效,使用全表扫描.但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描. 2. like key ...

  9. mysql范围条件_MySQL 索引及优化实战(一)

    mysql 随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能.高并发和高可用的系统. ...

最新文章

  1. android控制wifi状态
  2. mac电脑 显示隐藏文件 取消显示隐藏文件
  3. 【译】Diving Into The Ethereum VM Part 2 — How I Learned To Start Worrying And Count The Storage Cost
  4. zookeper安装_ZooKeeper安装和配置
  5. 《走出软件作坊》读后感
  6. mysql-启动、关闭与重启
  7. 实现机器学习的循序渐进指南X——KMeans
  8. iOS App常用的宏
  9. isPostBack解释
  10. 【转】LaTeX 符号命令大全
  11. Mac修改文件名的颜色
  12. ZOJ 2706 Thermal Death of the Universe (线段树)
  13. Oracle11g-linux安装
  14. Linux学习推荐书籍
  15. 嵌入式消息队列artemis
  16. docker下安装kong和konga
  17. OpenBlock Desktop v2.3.1积木编程
  18. Spatial-Temporal Transformer Networks for Traffic Flow Forecasting
  19. Towards Spatio-Temporal Aware Traffic Time Series Forecasting
  20. 2021年茶艺师(中级)报名考试及茶艺师(中级)复审考试

热门文章

  1. 内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0
  2. php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...
  3. java post webservice_[java.webservice] 如何通过HttpPost从服务器上获得一个sessionid
  4. docker项目部署 php_「Docker部署PHP+Vue项目」- 海风纷飞Blog
  5. ubuntu中安装sublime text3用于python编程
  6. 工业级以太网交换机-管理型
  7. 【渝粤题库】陕西师范大学400005 中国传统文化 作业(专升本)
  8. 【渝粤题库】陕西师范大学164204 供应链与物流管理 作业
  9. 【渝粤题库】广东开放大学 会展概论 形成性考核
  10. 【渝粤题库】广东开放大学 社会保障法 形成性考核