Lucene を使用してエンティティのインデックスを作成していたとき、すべてのインデックス付きプロパティを「all」という名前のフィールドに入れて、エンティティ タイプの「すべて」を検索する習慣がありました。
今、NHibernate.Search を使用して、これを行う方法を見つけることができません。私はこれを試しました:
[Indexed(Index = "MyIndex")]
public class Post
{
[DocumentId]
public virtual int Id { get; set; }
[IndexedEmbedded]
public virtual Author Author { get; set; }
[IndexedEmbedded]
public virtual IEnumerable<Category> Categories { get; set; }
[Field(Index.Tokenized, Store = Store.Yes)]
[Field(Name = "All", Index = Index.Tokenized, Store = Store.Yes)]
public virtual string Name { get; set; }
[Field(Name = "All", Index = Index.Tokenized, Store = Store.Yes)]
[Field(Index.Tokenized, Store = Store.Yes)]
public virtual string Body { get; set; }
}
しかし、ScopedAnalyzer.cs の 26 行目で、「key already present in dictionary」という例外がスローされました。
scopedAnalyzers.Add(scope, analyzer);
ここで、「スコープ」はインデックス フィールドの名前です (ここでは「すべて」)。のようにチェックを入れると
if( !scopedAnalyzers.ContainsKey( scope ) )
それは非常にうまく機能します。各「投稿」ドキュメントに2つのフィールドがあり、1つは本文、もう1つは名前です。しかし、NHibernate.Search のソース コードを変更するのは簡単ではありません。
1 つのフィールドでさまざまなプロパティにインデックスを付ける方法について、誰か提案がありますか?