C# C语言中Lucene的查询#
我是Lucene的新手。我有一些存储在数据库中的业务对象。检索它们时,我使用Lucene.NET对它们进行索引,如下所示:C# C语言中Lucene的查询#,c#,lucene.net,C#,Lucene.net,我是Lucene的新手。我有一些存储在数据库中的业务对象。检索它们时,我使用Lucene.NET对它们进行索引,如下所示: List<MyEntity> myResults = GetResultsFromDb(); using (var indexService = new IndexService(indexWriter)) { indexService.IndexEntities(myResults, p => { var document = new D
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;
});
}
List myResults=GetResultsFromDb();
使用(var indexService=newindexservice(indexWriter))
{
indexService.IndexEntities(myResults,p=>
{
var document=新文档();
添加(新字段(“ID”,p.ID.ToString(),Field.Store.NO,Field.Index.NOT_analysis));
添加(新字段(“名称”,p.名称,Field.Store.NO,Field.Index.NOT_analysis));
添加(新字段(“说明”,p.说明,Field.Store.YES,Field.Index.analysis));
添加(新字段(“IsActive”,p.IsActive.ToString(),Field.Store.NO,Field.Index.NOT_analysis));
归还文件;
});
}
我现在尝试搜索具有类似名称的业务对象。在尝试执行该搜索时,我使用以下命令:
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;
}
}
var indexsearch=new directoryindexsearch(new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,“Index”)),true;
使用(var searchService=newsearchservice(indexSearcher))
{
TermQuery TermQuery=新的TermQuery(新术语(“名称”,GetNameToSearchWith());
SearchResult searchResults=searchService.SearchIndex(termQuery,new MyEntityDefinition());
foreach(CourseSearchResult中的searchResult searchResult.Results)
{
filteredResults.Results.Add(searchResult);
如果(filteredResults.Count()>=25)
打破
}
}
当我执行查询时,我检索结果。问题是,唯一填充的值是“Name”字段。对于MyEntity,ID是一个Guid,描述是一个字符串,IsActive是一个可为空的bool。执行查询时,ID始终为空Guid,IsActive标志始终为null,描述始终为空字符串
我做错了什么?实际上,您在文档中告诉Lucene不要将这些数据存储在文档中。对于搜索期间要从文档中检索的所有字段,应将Field.Store.NO更改为Field.Store.YES。DirectoryIndexSearcher不是标准Lucene.Net发行版的一部分。这是SimpleLucene()库的一部分。我会尝试在没有simplelucene的情况下实现相同的搜索查询。如果它工作正常,那么试着调试simplelucene为什么不能按预期工作。