2

我的项目正在使用 Sitecore7 MVC、Solr 和 Glass Mapper。

“ContentSearch”索引几乎包含了站点核心模板中使用的所有字段。我使用 GlassMapper 类作为我的模型(它几乎只包含作为站点核心字段的属性)并对其进行查询。基本上按照此处所述执行“使用自定义结果类”:http: //glass.lu/docs/tutorial/sitecore/tutorial25/tutorial25.html

哪个按预期工作。

我的问题是:

只要索引存在(这是我想要的),它是否使用 Solr 索引填充类属性(通常是站点核心字段)?

或者

是否要通过 sitecore 获取字段值?(我认为这是低效的,在这种情况下,我将编写自定义类并遍历它们以填充 glassMapper 类,因为在我的视图中我使用 GlassMapper 类作为我的模型)

例如,我的一个模型如下所示:

    [SitecoreType]
    public class MyAwesomeModel
    {
        [SitecoreId]
        [IndexField("_id")]
        public virtual Guid Id { get; set; }

        [SitecoreInfo(SitecoreInfoType.Language)]
        [IndexField("_language")]
        public virtual string Language { get; set; }

        [TypeConverter(typeof(IndexFieldItemUriValueConverter))]
        [XmlIgnore]
        [IndexField("_uniqueid")]
        public virtual ItemUri Uri { get; set; }

        [SitecoreInfo(SitecoreInfoType.Version)]
        public virtual int Version
        {
            get
            {
                return Uri == null ? 0 : Uri.Version.Number;
            }
        }

        [SitecoreField(FieldName="MyRichtextField")]
        [IndexField("MyRichtextField")]
        public virtual string RichTextContent { get; set; }

        [SitecoreInfo(SitecoreInfoType.Url, UrlOptions = SitecoreInfoUrlOptions.LanguageEmbeddingNever)]
        public virtual string Url { get; set; }
    }
4

1 回答 1

5

实际上,我只是将一些代码推送到了正确的 Glass.Mapper 叉子: https ://github.com/csteeg/Glass.Mapper (在开发分支中)

你必须修补你的配置,所以你将使用玻璃特定的内容搜索设置:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <contentSearch>
      <indexConfigurations>
        <defaultLuceneIndexConfiguration type="Sitecore.ContentSearch.LuceneProvider.LuceneIndexConfiguration, Sitecore.ContentSearch.LuceneProvider">
          <indexDocumentPropertyMapper>
            <objectFactory type="Sitecore.ContentSearch.DefaultDocumentMapperObjectFactory, Sitecore.ContentSearch">
              <patch:attribute name="type">Glass.Mapper.Sc.ContentSearch.LuceneProvider.GlassDocumentMapperObjectFactory, Glass.Mapper.Sc.ContentSearch.LuceneProvider</patch:attribute>
            </objectFactory>
          </indexDocumentPropertyMapper>
        </defaultLuceneIndexConfiguration>
      </indexConfigurations>
      <configuration type="Sitecore.ContentSearch.ContentSearchConfiguration, Sitecore.ContentSearch">
        <indexes hint="list:AddIndex">
          <index id="sitecore_master_index">
            <patch:attribute name="type">Glass.Mapper.Sc.ContentSearch.LuceneProvider.GlassLuceneIndex, Glass.Mapper.Sc.ContentSearch.LuceneProvider</patch:attribute>
          </index>
          <index id="sitecore_web_index">
            <patch:attribute name="type">Glass.Mapper.Sc.ContentSearch.LuceneProvider.GlassLuceneIndex, Glass.Mapper.Sc.ContentSearch.LuceneProvider</patch:attribute>
          </index>
          <index id="sitecore_core_index">
            <patch:attribute name="type">Glass.Mapper.Sc.ContentSearch.LuceneProvider.GlassLuceneIndex, Glass.Mapper.Sc.ContentSearch.LuceneProvider</patch:attribute>
          </index>
        </indexes>
      </configuration>
    </contentSearch>
  </sitecore>
</configuration>

代码首先从索引返回值,如果它们存储在那里。如果请求的属性未存储在索引中,它将从 Sitecore 项中获取值

于 2014-07-16T09:31:57.317 回答