0

我是 Lucene 的新手。我有一些存储在数据库中的业务对象。当我检索它们时,我使用 Lucene.NET 对它们进行索引,如下所示:

List<MyEntity> myResults = GetResultsFromDb();
using (var indexService = new IndexService(indexWriter))
{
  indexService.IndexEntities(myResults, p =>
  {
    var document = new Document();
    document.Add(new Field("ID", p.ID.ToString(), Field.Store.NO, Field.Index.NOT_ANALYZED));
    document.Add(new Field("Name", p.Name, Field.Store.NO, Field.Index.NOT_ANALYZED));
    document.Add(new Field("Description", p.Description, Field.Store.YES, Field.Index.ANALYZED));
    document.Add(new Field("IsActive", p.IsActive.ToString(), Field.Store.NO, Field.Index.NOT_ANALYZED));
    return document;
  });
}

我现在正在尝试搜索具有相似名称的业务对象。在尝试执行该搜索时,我正在使用以下内容:

  var indexSearcher = new DirectoryIndexSearcher(new   DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Index")), true);
  using (var searchService = new SearchService(indexSearcher))
  {
    TermQuery termQuery = new TermQuery(new Term("Name", GetNameToSearchWith()));                    

    SearchResult<MyEntity> searchResults = searchService.SearchIndex<CourseSearchResult>(termQuery, new MyEntityDefinition());
    foreach (CourseSearchResult searchResult in searchResults.Results)
    {
      filteredResults.Results.Add(searchResult);
      if (filteredResults.Count() >= 25)
        break;
    }
  }

当我执行查询时,我检索结果。问题是,唯一填充的值是“名称”字段。对于 MyEntity,ID 是一个 Guid,Description 是一个字符串,IsActive 是一个可为空的布尔值。当我执行查询时,ID 始终为空 Guid,IsActive 标志始终为 null,Description 始终为空字符串。

我究竟做错了什么?

4

1 回答 1

0

实际上,您在文档中告诉 Lucene 不要将这些数据存储在文档中。对于要在搜索期间从文档中检索的所有字段,您应该将 Field.Store.NO 更改为 Field.Store.YES。

于 2012-07-19T14:41:46.223 回答