无法使用Lucene.net获得搜索的文档

本文关键字:搜索 文档 net Lucene | 更新日期: 2023-09-27 18:05:30

我是Lucene.net新手。我遇到的情况是,我需要在一个文件夹中的所有文档中搜索用户输入的关键字。

我已经为文件夹中的所有文件编制了索引,并为用户输入的关键字准备了查询,并进行了搜索。

问题是我可以获得命中值,当我尝试迭代命中值时,我无法从命中值的文档中获取字段。

这是我的代码。

public void Searching()
{
   Analyzer analyzer = new StandardAnalyzer(luceneVersion.Version.LUCENE_29);
   QueryParser parser = new QueryParser(luceneVersion.Version.LUCENE_29, "content", analyzer);
   Query query = parser.Parse(txtSearchText.Text);
   Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(txtIndexPath.Text.Trim()));
   Searcher searcher = new IndexSearcher(IndexReader.Open(directory, true));
   TopScoreDocCollector collector = TopScoreDocCollector.Create(100, true):
   searcher.Search(query, collector);
   ScoreDoc [] hits = collector.TopDocs(). ScoreDocs;
   foreach (ScoreDoc hit in hits)
   {
      int id = hit.Doc;
      float score = hit.Score;
      Document doc = searcher.Doc(id);
      string content = doc.Get("content");  // null
   }
}

当尝试调试时,我得到的内容是空的,空的

我在我的代码中遗漏了什么吗?这真的是困扰了我半天了。请帮帮我。

无法使用Lucene.net获得搜索的文档

我一直在尝试一切我能做的。问题是我一直在索引中没有存储文档的id字段。

这是我在索引时使用的代码。

doc.Add(new Field("id", id, Field.Store.NO, Field.Index.ANALYZED);

虽然它应该像下面这样,这样它将在索引文件中可用。

doc.Add(new Field("id", id, Field.Store.YES, Field.Index.ANALYZED);