刚刚开始学习java,发现有一句话说得很好啊,java是一种由生产力的语言,呵呵,最近看了车东的lucene的文章,很受启发,不过在删除的时候碰到了问题,从数据库里取出数据,而数据是有主键的,希望在删除一条数据的时候,把相应的索引也更新了,在网上差了很多资料都没有方法,好像是太简单了,大家都不屑一提啊,却让我忙了半天,谁让我E文不好,而且是个新手,所以只好作为日记写下来:(
建立索引的时候用Field.Keyword来建立索引
while(rs.next()){
Document doc = new Document();
doc.add(Field.Keyword("id",String.valueOf(rs.getInt(1))));
System.out.println(rs.getInt(1));
String body = rs.getString(3) + "+" + rs.getString(3);
System.out.print(body);
doc.add(Field.Text("name",rs.getString(2)));
doc.add(Field.Text("remark",rs.getString(3)));
//将文档写入索引
writer.addDocument(doc);
}
那么在删除的时候,只要知道ID的值就可以删除:
Directory directory = FSDirectory.getDirectory("e:\\test", false);
IndexReader reader = IndexReader.open(directory);
//IndexReader.unlock(directory);
Term term = new Term("id", "21");
//Term term = new Term("name", tmp);
int deleted = reader.delete(term);
System.out.println("deleted " + deleted + " documents containing " + term);
reader.close();
directory.close();
另外,还有一个问题,我在windows平台下使用的时候,在建立索引的时候
IndexWriter writer;
//用指定的语言分析器构造一个新的写索引器(第3个参数表示是否为追加索引)
writer = new IndexWriter(indexPath, new StandardAnalyzer(), true);
这里的最后一个参数,照文档中记述的是,是否新建索引,true的时候是追加,但是如果我设置的false的时候,就出现Lock@XXXXXX 临时文件错误,不知道为什么?
不过,总的来说,这个lucene真是一个好东西,要学的东西还有很多啊