【问题标题】:Sitecore web indexing issue for more version items in master database?主数据库中更多版本项目的 Sitecore Web 索引问题?
【发布时间】:2016-03-17 08:25:21
【问题描述】:

当在主数据库中创建项目的新版本时,如果我们编辑该项目并保存并发布它。该项目被发布并且网络数据库包含最新更新的版本项目。但是,虽然浏览项目在网站上不可见 该项目可以看到一些 $name。 有时该项目不可见,有时通过 $name 可见。 此外,当直接通过 url 浏览项目时,可以看到最新更新的内容,因此项目已发布。似乎与索引有关的一些问题。 但是,当一个项目在没有创建新版本的情况下直接编辑时,问题就不存在了。所以问题在于索引以及版本,因为我猜网络索引会有多个最新版本,即制造问题。 如何解决这个问题?作为一种解决方法,我必须从 Web 数据库中删除该项目,然后重新发布和重建索引以解决问题。

是否需要为多个版本的项目自定义现有的索引和爬虫策略?如果需要自定义或覆盖和更改哪些文件? 这是要显示的数据项的网络索引的代码sn-p?

<!-- sitecore_web_content_mag_index -->
        <indexes hint="list:AddIndex">
          <index id="sitecore_web_content_mag_index" type="Sitecore.ContentSearch.LuceneProvider.SwitchOnRebuildLuceneIndex, Sitecore.ContentSearch.LuceneProvider">
            <param desc="name">$(id)</param>
            <param desc="folder">$(id)</param>
            <param desc="propertyStore" ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)" />
            <configuration ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration" />
            <strategies hint="list:AddStrategy">
              <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/onPublishEndAsync" />
            </strategies>
            <commitPolicyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor, Sitecore.ContentSearch">
              <policies hint="list:AddcommitPolicy">
                <policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy, Sitecore.ContentSearch" />
              </policies>
            </commitPolicyExecutor>
            <locations hint="list:AddCrawler">
              <crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
                <Database>web</Database>
                <Root>/sitecore/content/Site/Home</Root>
              </crawler>
            </locations>
          </index>
        </indexes>

【问题讨论】:

  • 如何从网络数据库/索引中检索项目?你们有多语言网站吗?
  • @MarekMusielak 我正在使用 web_content_index 策略从网络检索项目。我有多语言网站,但问题是如果我在主数据库中有一个项目有两个英语版本。此外,如果我删除特定语言的项目的所有旧版本,然后发布它,那么问题就解决了。我必须删除所有旧版本,如果我必须将任何项目内容回滚到以前的版本,这会产生问题。
  • 如果您需要帮助,您需要发布从索引获取数据的代码以及在页面上显示数据的代码。
  • @MarekMusielak 这是从索引获取数据的代码...我想在页面上显示数据的代码没有问题,因为问题存在于使用此索引策略的多个页面.此外,一旦我通过主数据库保存和浏览页面,数据就会立即显示。用于显示的数据项是可分项

标签: indexing sitecore version


【解决方案1】:

使用 ContentSearch API 时,您可以通过执行以下操作过滤结果以仅返回最新版本:

searchContext.GetQueryable<SearchResultItem>()
             .Where(result => result["_latestversion"].Equals("1");

或者,如果您已经创建了自己的搜索结果模型,则可以向其添加属性以使查询语法更加简洁。

搜索结果模型:

public class CustomSearchResultItem : SearchResultItem
{
    [IndexField("_latestversion")]
    public bool IsLatestVersion { get; set; }

    // other properties
}

查询

searchContext.GetQueryable<CustomSearchResultItem>()
             .Where(result => result.IsLatestVersion);

另一种方法是使用本文所述的扩展方法:http://laubplusco.net/generic-extension-methods-sitecore-contentsearch/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多