我是 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 始终为空字符串。
我究竟做错了什么?