Solrnet: не удалось получить многозначное поле из Solr - PullRequest
1 голос
/ 30 декабря 2011

У меня есть модель, подобная приведенной ниже

public class Product
{
    [SolrUniqueKey("id")]
    public int ID { get; set; }
    [SolrField("storage")]
    public string Storage { get; set; }
    [SolrField("components")]
    public Components Components { get; set; }
}

public class Components : List<string>
{
    public Components()
    {}
    public Components(string[] components)
    {
        AddRange(components);
    }
}

В моем schema.xml я сопоставляю поля как:

   <field name="id" type="string" indexed="true" stored="true" required="true" /> 
   <field name="storage" type="string" indexed="true" stored="true" omitNorms="true"/>
   <field name="components" type="text_ws" stored="true" multiValued="true" omitNorms="true"/>

Я добавил список из 5 продуктов в Solrиндекс.Если я запрашиваю со страницы администрирования Solr «*», я получаю документ с ответом на один из результатов:

<doc>
  <arr name="components">
    <str>blah1</str>
    <str>blah2</str>
    <str>blah3</str>
  </arr>
  <str name="id">0</str>
  <str name="storage">foo</str>
</doc>

Однако, когда я запрашиваю Solr через Solrnet, используя что-то вроде:

private readonly ISolrReadOnlyOperations solr var results = solr.Query (SolrQuery.All);

Я считаю, что компоненты всегда нулевые.

Любая помощь приветствуется.

Я вижуэто поведение для любой производной коллекции.

Ответы [ 2 ]

1 голос
/ 03 января 2012

Вы можете сделать это с помощью свойства 'proxy', как объяснено в в этом ответе .Или вы можете написать ISolrFieldParser / ISolrFieldSerializer для вашего типа Компонентов.

Независимо от этого, я согласен, что отделение модели вашего домена от модели индекса обычно является хорошимидея.

1 голос
/ 02 января 2012

Полагаю, я выяснил причину - при индексации многозначный объект сохраняется как массив, а после десериализации он преобразуется в ArrayList.Следовательно, в моем случае производный список нельзя использовать напрямую.

Извлеченный урок заключается в том, что мне нужно отделить модель моего домена от модели индекса, что в ретроспективе звучит как хорошая практика.

...