您的位置:首页 > 其它

关于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种现象,我采用以下思想来解决的:在索引中加入一个全部是英数字的主键,如果要删除包含有中文的字段的条件时,先用包含中文的字段检索出主键数组,然后再根据主键一一删除。

注:可能有些大大已经用过这个方法或者有删除中文索引方法了,只是没有拿出来分享。但愿这篇文中能帮助一些人,也能起到抛砖引玉的作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: