上QQ阅读APP看书,第一时间看更新
3.2.4 删除索引库中的索引文档
索引过一段时间后可能会过期。例如,索引的一些网页链接会失效。可从IndexWriter中删除文档。
indexWriter.delete(new Term("id", "1"));
Term的值在索引库中并不一定是唯一的,比如要把某个类别的商品下架:
indexWriter.delete(new Term("cat", "book")); //把图书类商品从索引库中删除
IndexReader和IndexWriter都能删除文档,区别是:当IndexWriter打开索引的时候,IndexReader的删除操作会抛出LockObtainFailedException异常。
Lucene在删除索引时,经常会出现代码成功执行,但索引并未真正删除的现象。在创建Term时,注意Term的值必须是不可再拆分的词,否则删除不成功。
若需要批量删除某个网站的网页,则可以根据查询条件删除:
PrefixQuery query = new PrefixQuery(new Term("url", "http://www.lietu.com"); indexWriter.deleteDocuments(query);