关于Lucene3.0的删除索引问题
2010-11-02 09:11
302 查看
这几天要用Lucene做点东西,所以看了一些文章和Lucene的wiki,进而发现了一些小问题,现在和大家分享。
至于创建索引和查找索引,现在网上随便一搜,都有一大堆的结果。现在要说的是删除索引。
在Apache的网站上的FAQ中,推荐用IndexWriter的deleteDocuments来实现删除符合条件的索引,经过多次的测试发现,用IndexWriter的deleteDocuments删除是会把.cfs文件删除掉(不知道什么原因,而且IndexWriter的各种构建方法我都试过了,也许是Lucene的一个bug)。所以我采用IndexReader的deleteDocuments来删除。代码如下:
public static void main(String[] args) throws IOException {
String indexDir = "e:\\javatest\\index2";
Directory dir = new SimpleFSDirectory(new File(indexDir));
IndexReader reader = IndexReader.open( dir,false);
Term term = new Term("id","4");
int delCnt = reader.deleteDocuments(term);
reader.close();
System.out.println("共删除索引条数:"+delCnt);
}
出现的现象有:
1、要删除的字段的值中全部是英数字的时候,删除没有问题。
2、要删除的字段的值包含中文时就删除不成功。
鉴于有第2种现象,我采用以下思想来解决的:在索引中加入一个全部是英数字的主键,如果要删除包含有中文的字段的条件时,先用包含中文的字段检索出主键数组,然后再根据主键一一删除。
注:可能有些大大已经用过这个方法或者有删除中文索引方法了,只是没有拿出来分享。但愿这篇文中能帮助一些人,也能起到抛砖引玉的作用。
至于创建索引和查找索引,现在网上随便一搜,都有一大堆的结果。现在要说的是删除索引。
在Apache的网站上的FAQ中,推荐用IndexWriter的deleteDocuments来实现删除符合条件的索引,经过多次的测试发现,用IndexWriter的deleteDocuments删除是会把.cfs文件删除掉(不知道什么原因,而且IndexWriter的各种构建方法我都试过了,也许是Lucene的一个bug)。所以我采用IndexReader的deleteDocuments来删除。代码如下:
public static void main(String[] args) throws IOException {
String indexDir = "e:\\javatest\\index2";
Directory dir = new SimpleFSDirectory(new File(indexDir));
IndexReader reader = IndexReader.open( dir,false);
Term term = new Term("id","4");
int delCnt = reader.deleteDocuments(term);
reader.close();
System.out.println("共删除索引条数:"+delCnt);
}
出现的现象有:
1、要删除的字段的值中全部是英数字的时候,删除没有问题。
2、要删除的字段的值包含中文时就删除不成功。
鉴于有第2种现象,我采用以下思想来解决的:在索引中加入一个全部是英数字的主键,如果要删除包含有中文的字段的条件时,先用包含中文的字段检索出主键数组,然后再根据主键一一删除。
注:可能有些大大已经用过这个方法或者有删除中文索引方法了,只是没有拿出来分享。但愿这篇文中能帮助一些人,也能起到抛砖引玉的作用。
相关文章推荐
- lucene3.0更新索引时原索引不删除的问题
- 关于Lucene.net 2.9.2.2 中删除索引的若干问题
- 关于Lucene.net 2.9.2.2 中删除索引的若干问题
- 关于lucene断点续索引和增量索引的问题
- 关于lucene断点续索引和增量索引的问题
- 关于lucene断点续索引和增量索引的问题zz
- 关于Lucene断点续索引和增量索引的问题
- 关于在服务器上删除文件及删除数据库时的操作问题
- 关于Python multiprocessing.Array创建的共享内存无法删除的问题
- 关于 maven 私服删除版本恢复的问题
- 关于swift for 循环 遍历数组删除元素的bug问题
- 有关Lucene的问题(7):用Lucene构建实时的索引
- 关于lucene2.0的创建、检索和删除功能的完整实现
- 修复数据库索引问题:删除索引以提升性能
- lucene使用内存索引时一些问题OutOfMemoryError: Java heap space
- 关于mysql中由于类型转换导致索引无法使用的问题
- lucene索引删除,恢复,更新
- 大容量加载数据到现有表以及sql server数据库删除聚集索引的问题
- lucene5学习 - 索引基本操作(创建,查询,更新,删除,分页)
- 关于集合中在迭代器中用集合的对象删除元素的并发异常问题