NHibernate Search と Lucene をいじって、法人の検索可能なインデックスを作成しています。私のドメイン モデルは次のようになります。
[Indexed]
public abstract class LegalEntity : AggregateRoot
{
public virtual Address Address { get; set; }
}
public class Person : LegalEntity
{
public virtual string FirstNames { get; set; }
public virtual string LastName { get; set; }
}
public class Company: LegalEntity
{
public virtual string Name { get; set; }
}
public class Address : Component
{
public virtual string Street { get; set; }
public virtual string HouseNumber { get; set; }
// etc...
}
サブクラス化が示すように、はおよびLegalEntity
として特殊化された NHibernate エンティティであり、NHibernate コンポーネントです。Person
Company
Address
では、コンポーネントLegalEntity
内のフィールドを含む のすべてのフィールドを含む、本当に Google のようなあいまい検索を作成するにはどうすればよいでしょうか?Address
私の最初のアイデアは、コンポーネントAddressFieldBridge
のフィールドを取り込むのに役立つを実装してから、すべてのフィールドを投入することでしたが、複数の検索語の間の結合としてを構築する方法を見つけることができませんでした。Address
[Field]
FuzzyQuery
[Field]
私の次のアイデアは、次のようにonでタグ付けされた抽象プロパティを作成することでしたLegalEntity
:
[Field(Index.Tokenized)]
public abstract string SearchableText { get; }
次に、コンポーネントの名前とすべてのフィールドを 1 つの文字列に結合したテキストを取得して返しPerson
ます。この文字列は、Lucene によってトークン化され、インデックス付けされます。Company
Address
しかし、それは私をちょっと不快に感じさせました。
このタスクを達成するための(ドメインモデルの観点から)最善かつ最も邪魔にならない方法を学びたいと思います-どんな提案も大歓迎です:)