Sitecore - не отображать индексированное поле при использовании ContentSearchManager из Solr Index - PullRequest
0 голосов
/ 03 октября 2018
  • Sitecore 8.2.6
  • Solr 6.6.2

Проблема:

Невозможно отобразить день рождения (любой -см. вложение) поля к модели C #.Все отображаются как null (при использовании returnType="string") или 01/01/0001 (при использовании returnType="datetime")

enter image description here

I 'm используя sitecore_analytics_index для получения результатов поиска для контактов EXM.При просмотре индекса Solr (через localhost: 8984 / solr) я четко вижу поля.

dateofbirth и contact.dateofbirth Я вижу в коллекции Fields при просмотре объекта в списке BirthdaySearchResultItem возврат из поиска по индексу.

Я могудля правильного сопоставления contact.tags_sm и contact.contactid.

public class BirthdaySearchResultItem : SearchResultItem, IObjectIndexers
{
    [IndexField("contact.tags_sm")]
    public string[] ContactList { get; set; } // maps correctly

    [DataMember]
    [IndexField("contact.contactid")]
    public virtual Guid ContactId { get; set; } // maps correctly

    [DataMember]
    [IndexField("contact.dateofbirth")]
    public virtual DateTime BirthDay { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("dateofbirth")]
    public virtual DateTime BirthDay1 { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("contact.dateofbirth_t")]
    public virtual DateTime BirthDay2 { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("contact.dateofbirth_t_en")]
    public virtual DateTime BirthDay3 { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("birthday")]
    public virtual DateTime BirthDay4 { get; set; } // have tried using "string"
}

      <index id="sitecore_analytics_index">
        <configuration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration">
          <fieldMap>
            <fieldNames hint="raw:AddFieldByFieldName">
              <field fieldName="contact.contactid"                     returnType="guid"/>
              <field fieldName="contact.dateofbirth"                   returnType="datetime"/>  <!-- have tried "string" as well -->
              <field fieldName="dateofbirth"                           returnType="datetime" />
              <field fieldName="contact.dateofbirth_t"                 returnType="datetime" />
              <field fieldName="contact.dateofbirth_t_en"              returnType="datetime" />

.... omitted for brevity

        var indexName = "sitecore_analytics_index";
        var index = ContentSearchManager.GetIndex(indexName);

        using (var context = index.CreateSearchContext())  //IContactDetailFacet
        {
            var predicate = PredicateBuilder.True<BirthdaySearchResultItem>();
            var test = context.GetQueryable<BirthdaySearchResultItem>().ToList();

        }

1 Ответ

0 голосов
/ 05 октября 2018

На основании вашего образца данных я вижу, что вы используете начальный "/" вместо "-", что важно, поскольку Solr использует формат ISO для дат, см. здесь .Поэтому я предлагаю вам сначала добавить атрибут format к определению вашего индекса, например:

<field fieldName="contact.dateofbirth"   returnType="datetime"   format="yyyy-MM-dd'T'HH:mm:ss'Z'" />

А затем в вашей модели используйте метод Sitecore.DateUtil.IsoDateToDateTime() для преобразования строки даты в формате ISO в класс DateTime.

...