Как структурировать модель предметной области при использовании NHibernate Search / Lucene - PullRequest
1 голос
/ 12 января 2010

Я возился с 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, специализирующейся как Person и Company, а Address является компонентом NHibernate.

Теперь, как мне лучше всего создать действительно похожий на Google нечеткий поиск, который включает все поля LegalEntity, включая поля внутри компонента Address?

Моей первой идеей было реализовать AddressFieldBridge, чтобы помочь в вводе полей компонента Address, а затем просто добавить [Field] для всех полей, но тогда я не смог найти способ построить FuzzyQuery как соединение между несколькими поисковыми терминами.

Моей следующей идеей было создание абстрактного свойства, помеченного [Field] на LegalEntity, например:

    [Field(Index.Tokenized)]
    public abstract string SearchableText { get; }

и затем Person и Company возвращают тексты, которые объединяют имена и все поля из компонента Address в одну строку, которая затем будет разбита на токены и проиндексирована Lucene.

Это, однако, заставило меня чувствовать себя немного непристойно.

Я хотел бы изучить лучший и наименее навязчивый (с точки зрения модели предметной области) способ решения этой задачи - любые предложения приветствуются:)

1 Ответ

3 голосов
/ 15 февраля 2010

Посмотрите на мой вопрос .

Андрей создан патч для определения материала люцена снаружи. Синтаксис не очень чистый (может быть, в этом есть какой-то прогресс, не проверял), но я думаю, он выполняет свою работу.

...