SolrNet / NHibernate - использование SolrField на дочернем (HasMany) классе? - PullRequest
0 голосов
/ 05 мая 2011

Я начал играть с интеграцией NHibernate на Solr.До сих пор так здорово.Но у меня есть вопрос, который я не вижу в документах.Я понимаю, что могу отобразить список следующим образом:

[SolrField("blah")]
public List<string> Blah {get;set;}

Но что, если я хочу использовать пользовательский класс?Моя установка NHibernate выглядит примерно так:

public IList<MyCustomClass> CustomList {get;set;}

В идеале я хотел бы отобразить одно поле внутри MyCustomClass, эффективно составив список этого поля.Это возможно?Я мог бы сделать следующее:

public IList<MyCustomClass> CustomList {get;set;}

[SolrField("custom")]
private List<DateTime> CustomFieldGetter {
    get {
        return CustomList.Select(c => c.DateField).ToList();
    }
}

Но это похоже на гигантскую кучу.Есть мысли?

1 Ответ

1 голос
/ 05 мая 2011

Отображение составных / вложенных объектов в настоящее время не реализовано в SolrNet . Индекс Solr является плоской структурой (см. это и это ), поэтому SolrNet поощряет денормализованные классы отображения. Это, конечно, противоречит проектированию реляционных баз данных, поэтому вы должны денормализовать свои данные, прежде чем передавать их в Solr. Эта денормализация сильно зависит от того, какие запросы вам понадобятся. См. вики-страницу SchemaDesign для справки и подсказок.

Если вы действительно знаете, что делаете, вы можете попробовать написать и подключить пользовательский ISolrFieldParser и ISolrFieldSerializer для своего MyCustomClass.

...