自己动手写分布式搜索引擎
上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);