Lucene笔记08-Directory的几种操作方式

一、IndexReader的删除操作

IndexReader也可以执行删除操作,使用IndexReader执行的删除操作不需要重新获取IndexReader对象了。使用IndexReader删除的前提是,在创建IndexReader对象的时候,要设置它的readonly为false。

indexReader = IndexReader.open(directory,false);
indexReader.deleteDocuments(new Term("id", "1"));

不过还是建议使用IndexWriter对象来执行删除操作,下面列举一下使用IndexReader执行删除操作可能存在的问题:

  1. 当有一个IndexWriter打开的时候,IndexReader的删除操作是不能够进行的,会报LockObtainFailedException。
  2. 当IndexReader被多个线程使用的时候,一个线程用其进行删除,会使得另一个线程看到的索引有所改变,使得另一个线程的结果带有不确定性。
  3. 对于更新操作,在Lucene中是先删除,再添加的,然而删除的被立刻看到的,而添加却不能够立刻看到,造成了数据的不一致性。
  4. 即便以上问题可以通过锁来解决,然而背后的操作影响到了搜索的速度,是我们不想看到的。

二、Directory的介绍

Directory下面有4个类:FileSwitchDirectory,FSDirectory,NRTCacheDirectory,RAMDirectory。

FSDirectory:FSDirectory又有3个实现类:SimpleFSDirectory,NOIFSDirectory,MMapDirectory,它们各自有各自的使用场景。使用FSDirectory.open(),由open()方法自动进行选择。

RAMDirectory:将索引信息存储到内存中,优点是速度快,缺点是不能持久化。

具体使用哪一种方式就根据具体的业务需求了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值