【问题标题】:How To Delete a Document using indexWriter in LuceneNet如何在 LuceneNet 中使用 indexWriter 删除文档
【发布时间】:2012-05-03 21:22:21
【问题描述】:

我在我的控制器中调用了这个方法,它必须删除一个特定的文档。我在一些文章中读到,删除文档的最佳方法是使用 IndexWriter。但我不能让它工作。这是我的代码

我的索引:

    var article1 = new Document();
               article1.Add(new Field("Id", "1", Field.Store.YES, Field.Index.ANALYZED));
               article1.Add(new Field("Author", "Author", Field.Store.YES, Field.Index.ANALYZED));
               article1.Add(new Field("Title", "Title", Field.Store.YES, Field.Index.ANALYZED));

  var directory = FSDirectory.Open(new DirectoryInfo(IndexRoute));
           var analyzar = new StandardAnalyzer(Version.LUCENE_29);

           var writer = new IndexWriter(directory, analyzar, true,  IndexWriter.MaxFieldLength.LIMITED);

           writer.AddDocument(article1);
           writer.Optimize();
           writer.Commit();
           writer.Close();

方法删除:

public void Delete(string id)
{
    var directory = FSDirectory.Open(new DirectoryInfo(IndexRoute));
    var analyzar = new StandardAnalyzer(Version.LUCENE_29);
    var writer = new IndexWriter(directory, analyzar, true, IndexWriter.MaxFieldLength.LIMITED);
    var term = new Term("Id", id);
    writer.DeleteDocuments(term);
    writer.Optimize();
    writer.Commit();
    writer.Close();
}

控制器中调用“删除”void的方法:

  public ActionResult Delete()
    {
        _carService.Delete("1");
        return RedirectToAction("Index", "Home");
    }

所以我找不到我的错误,请帮忙...

【问题讨论】:

    标签: full-text-search lucene.net


    【解决方案1】:

    当您为这样的删除方法构建 IndexWriter 时:

    new IndexWriter(directory, analyzar, true, IndexWriter.MaxFieldLength.LIMITED);
    

    您为 create 参数指定 true,这会用空索引覆盖现有索引,从而删除所有文档。

    【讨论】:

    • 有时我们会忘记一些细节并陷入困境。我正要扯掉我的头发然后到了这里。当我查看我的索引构造函数时,“create”参数被固定为 true。谢谢提醒。
    【解决方案2】:

    这是因为您将 id 字段存储为 Field.Index.ANALYZED,因此您应该始终将 id 字段存储为 Field.Index.NOT_ANALYZED,这样这些字段就不会被标记化,而是按原样存储在索引中。对于您不想在索引时更改的其他字段也是如此。

    【讨论】:

    • +1 表示不应分析密钥。但是,StandardAnalyzer 不会弄乱问题中使用的基本整数键。
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多