java lucene 3.0.3_java – Lucene 3.0.3不删除文件

我们使用Lucene索引一些内部文档.有时我们需要删除文档.这些文档具有唯一的ID,并由类DocItem表示如下(所有代码都是简单的版本,只有重要的(我希望)部分):

public final class DocItem {

public static final String fID = "id";

public static final String fTITLE = "title";

private Document doc = new Document();

private Field id = new Field(fID, "", Field.Store.YES, Field.Index.ANALYZED);

private Field title = new Field(fTITLE, "", Field.Store.YES, Field.Index.ANALYZED);

public DocItem() {

doc.add(id);

doc.add(title);

}

... getters & setters

public getDoc() {

return doc;

}

}

因此,要索引文档,将创建一个新的DocItem并将其传递给索引器类,如下所示:

public static void index(DocItem docitem) {

File file = new File("indexdir");

Directory dir= new SimpleFSDirectory(file);

IndexWriter idxWriter = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);

idxWriter.addDocument(docitem.getDoc());

idxWriter.close();

}

我们创建了一个迭代索引目录的辅助方法:

public static void listAll() {

File file = new File("indexdir");

Directory dir = new SimpleFSDirectory(file);

IndexReader reader = IndexReader.open(dir);

for (int i = 0; i < reader.maxDoc(); i++) {

Document doc = reader.document(i);

System.out.println(doc.get(DocItem.fID));

}

}

运行listAll,我们可以看到我们的文档被正确编入索引.至少,我们可以看到id和其他属性.

我们使用IndexSearcher检索文档,如下所示:

public static DocItem search(String id) {

File file = new File("indexdir");

Directory dir = new SimpleFSDirectory(file);

IndexSearcher searcher = new IndexSearcher(index, true);

Query q = new QueryParser(Version.LUCENE_30, DocItem.fID, new StandardAnalyzer(Version.LUCENE_30)).parse(id);

TopDocs td = searcher.search(q, 1);

ScoreDoc[] hits = td.scoreDocs;

searcher.close();

return hits[0];

}

因此,在检索它之后,我们尝试删除它:

public static void Delete(DocItem docitem) {

File file = new File("indexdir");

Directory dir= new SimpleFSDirectory(file);

IndexWriter idxWriter = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);

idxWriter.deleteDocuments(new Term(DocItem.fID, docitem.getId()));

idxWriter.commit();

idxWriter.close();

}

问题是它不起作用.永远不会删除该文档.如果我在删除后运行listAll(),文档仍然存在.我们试图使用IndexReader,没有幸运.

到了这个post和post,我们认为我们正在使用它.

我们做错了什么?任何建议?我们正在使用lucene 3.0.3和java 1.6.0_24.

TIA,

短发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值