这几天要用Lucene作点东西,因此看了一些文章和Lucene的wiki,进而发现了一些小问题,如今和你们分享。java
至于建立索引和查找索引,如今网上随便一搜,都有一大堆的结果。如今要说的是删除索引。数组
在Apache的网站上的FAQ中,推荐用IndexWriter的deleteDocuments来实现删除符合条件的索引,通过屡次的测试发现,用IndexWriter的deleteDocuments删除是会把.cfs文件删除掉(不知道什么缘由,并且IndexWriter的各类构建方法我都试过了,也许是Lucene的一个bug)。因此我采用IndexReader的deleteDocuments来删除。代码以下:ide
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);
}网站
出现的现象有:索引
一、要删除的字段的值中所有是英数字的时候,删除没有问题。it
二、要删除的字段的值包含中文时就删除不成功。io
鉴于有第2种现象,我采用如下思想来解决的:在索引中加入一个所有是英数字的主键,若是要删除包含有中文的字段的条件时,先用包含中文的字段检索出主键数组,而后再根据主键一一删除。class
注:可能有些大大已经用过这个方法或者有删除中文索引方法了,只是没有拿出来分享。希望这篇文中能帮助一些人,也能起到抛砖引玉的做用。test