lucene索引的更新和删除

索引的删除:
IndexReader和IndexWriter都由删除索引的功能,但这两者是有区别的,
使用IndexReader删除索引时,索引会马上被删除,其有两种方法,可以删除索引deleteDocument(int docNum)和deleteDocument(Term term)前者会删除编号为docNum的document,后者会删除带有term的document。但是用这个类删除有局限性,当用此类打开的索引后来修改后会报StaleReaderException异常,并且当其他writer已经打开此索引时也会报异常。
IndexWriter可以根据多种情况进行删除deleteAll()删除所有的document、deleteDocuments(Query… queries)删除多个查询出来的document,deleteDocuments(Query query)删除query查询出来的document等等,但用Indexwriter执行删除的话一定要进行关闭,否则删除不会立马生效。
Directory directory = FSDirectory.open(new File("d:\\lucene"));
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
//最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
config.setMaxBufferedDocs(100);
//控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
config.setMaxBufferedDocs(Integer.MAX_VALUE);
IndexWriter indexWriter = new IndexWriter(directory, config);
indexWriter.deleteDocuments(new Term("id",index));
//这两句一定要执行
indexWriter.optimize();
indexWriter.close();


索引的更新:
IndexWriter可以更新索引。
更新索引实际上是把要更新的document删除,然后把修改过的document加入到索引中,其方法是document(Term term,Document doc),第一个参数是删除含有term的document,第二个参数是更新后的document。
Directory directory = FSDirectory.open(new File("d:\\lucene"));
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, new StandardAnalyzer(Version.LUCENE_34));
//最大缓存文档数,控制写入一个新的segment前内存中保存的document的数目
config.setMaxBufferedDocs(100);
//控制一个segment中可以保存的最大document数目,值较大有利于追加索引的速度,默认Integer.MAX_VALUE,无需修改。
config.setMaxBufferedDocs(Integer.MAX_VALUE);
IndexWriter indexWriter = new IndexWriter(directory, config);

Document doc = new Document();

//设置Field的name是为了搜索时更精确,比如只想在title中搜索。
Field idField = new Field("id", blog2.getId() + "", Field.Store.YES, Field.Index.NOT_ANALYZED);
Field titleField = new Field("title", blog2.getTitle(), Field.Store.YES, Field.Index.ANALYZED);
Field contentField = new Field("content", blog2.getContent(), Field.Store.NO, Field.Index.ANALYZED);
Field dateField = new Field("date", blog2.getDate(), Field.Store.YES, Field.Index.NO);

doc.add(titleField);
doc.add(contentField);
doc.add(idField);
doc.add(dateField);

indexWriter.updateDocument(new Term("id", blog2.getId() + ""), doc);
//这两句一定要执行,不然的话,更新不会马上执行。
indexWriter.optimize();
indexWriter.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zm274310577

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值