关于Lucene3.0的删除索引问题

这几天要用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

相关文章
相关标签/搜索