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

私は何を間違っていますか?

4

1 に答える 1