【发布时间】:2012-06-19 12:43:10
【问题描述】:
我是 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 始终为空字符串。
我做错了什么?
【问题讨论】:
-
DirectoryIndexSearcher 不是标准 Lucene.Net 发行版的一部分。这是 SimpleLucene (simplelucene.codeplex.com) 库的一部分。我会尝试在没有 simplelucene 的情况下实现相同的搜索查询。如果它工作正常,然后尝试调试 simplelucene 没有按预期工作的原因。
标签: c# lucene.net