私は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 は String、IsActive は null 許容 bool です。クエリを実行すると、ID は常に空の Guid になり、IsActive フラグは常に null になり、Description は常に空の文字列になります。
私は何を間違っていますか?