首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从lucene中按术语删除文档

从lucene中按术语删除文档
EN

Stack Overflow用户
提问于 2010-09-15 00:36:04
回答 1查看 1.8K关注 0票数 1

以下代码不会按预期按术语删除文档:

代码语言:javascript
复制
        RAMDirectory idx     = new RAMDirectory();
        IndexWriter writer  = new IndexWriter(idx,
                                   new SnowballAnalyzer(Version.LUCENE_30, "English"),
                                   IndexWriter.MaxFieldLength.LIMITED);
        Document doc = new Document();
        doc.add(new Field("title", "mydoc", Field.Store.YES, Field.Index.NO));
        doc.add(new Field("content", "some content, deleteme", Field.Store.YES, Field.Inde
x.ANALYZED));
        writer.addDocument(doc);
        Document doc2 = new Document();        
        doc2.add(new Field("title", "mydoc2", Field.Store.YES, Field.Index.NO));
        doc2.add(new Field("content", "other content, don't deleteme", Field.Store.YES, Field.I
ndex.ANALYZED));
        writer.addDocument(doc2);
        writer.optimize();
        writer.close();

        /*
        IndexReader reader = IndexReader.open(idx, false);
        int docs_up_for_deletion = reader.docFreq(new Term("title"));
        int before = reader.numDocs();
        int docs_deleted = reader.deleteDocuments(new Term("title", "mydoc"));
        reader.close();
        */

        IndexWriter writer2  = new IndexWriter(idx,
                                   new SnowballAnalyzer(Version.LUCENE_30, "English"),
                                   IndexWriter.MaxFieldLength.LIMITED);
        int before = writer2.numDocs();
        writer2.deleteDocuments(new Term("title", "mydoc"));
        writer2.commit();
        writer2.optimize();
        int after = writer2.numDocs();
        writer2.close();
        int docs_deleted = before - after;

我尝试过用IndexReader和IndexWriter删除,但都不起作用。

我还尝试在上面的代码后面添加另一个IndexReader搜索,以防只有在关闭writer2 (在this FAQ中提到)之后才更新数字,但这没有帮助。执行writer.deleteAll()是可行的,但不是按术语删除。

我发现了一个旧的引用,即只有Field.Keyword类型的字段可以删除,但在Lucene3.x中这不再是有效的字段类型

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-15 01:01:53

您的标题字段未编制索引。变化

代码语言:javascript
复制
new Field("title", "mydoc", Field.Store.YES, Field.Index.NO)

代码语言:javascript
复制
new Field("title", "mydoc", Field.Store.YES, Field.Index.ANALYZED)

代码语言:javascript
复制
new Field("title", "mydoc", Field.Store.YES, Field.Index.NOT_ANALYZED)

这取决于您是否希望分析您的字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3710941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档