lucene删除某个索引的问题

g315583688 2011-10-18 01:51:57
我想问下
public static void deleteOneIndex(String indexDir, Analyzer analyzer,
String field, String key) {
try {
Directory dir = new SimpleFSDirectory(new File(indexDir));
IndexWriter indexWriter = new IndexWriter(dir, analyzer, false,
IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.deleteDocuments(new Term(field, key));
indexWriter.optimize();
indexWriter.commit();
System.out.println("是否删除成功=" + indexWriter.hasDeletions());
System.out.println("一共有" + indexWriter.maxDoc() + "索引");
System.out.println("还剩" + indexWriter.numDocs() + "索引");
indexWriter.close();
} catch (IOException e) {
System.out.println(" caught a " + e.getClass()
+ "\n with message: " + e.getMessage());
}
}
这样为什么没有删除掉我想删除的索引
例如:deleteOneIndex("D:\\logs\\lucenedoc",new StandardAnalyzer(Version.LUCENE_33),"name","张三");
没有分了 希望指点下,不胜感激!!
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
飓风zj 2011-10-22
  • 打赏
  • 举报
回复
你应该先获得term 然后在删除这个term 这是正确的做法
qq931226110 2011-10-22
  • 打赏
  • 举报
回复
有一些过时的索引我们需要删除,怎么办呢?

IndexReader reader = IndexReader.open("c:\\index");

reader.delete(0);

这样我们就可以按照文档的顺序删除对应的文档了,但是这样不太现实,不对吗?我们怎么会知道文档的顺序呢?

下面我们看看第二中方法:

IndexReader reader = IndexReader.open("c:\\index");

reader.delete(new Term("name","word1"));

reader.close();

按照字段来删除对应的文档,这样合理多了。以后要删除时就按照词条的方式去删除吧 !

索引锁: write.lock , commit.lock.

write.lock 是为了避免几个线程同时修改一个索引文档而设置。当实例一个 indexwrite 时建立和使用 indexReader 删除文档时建立。

Commit.lock 该锁主要在 segment 在建立,合并或读取时生成。

希望对楼主有用!
g315583688 2011-10-18
  • 打赏
  • 举报
回复
有人吗,为什么好多帖子都是这样的写法为什么我删不掉呢,求高手指点

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧