针对master数据库中更多版本项的Sitecore Web索引问题?

时间:2015-12-11 12:12:06

标签: indexing sitecore version

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

是否需要针对多个版本的项目自定义现有的索引和爬网程序策略?如果需要,哪些文件需要自定义或覆盖和更改?“ 以下是要显示的数据项的Web索引的代码段吗?

<!-- 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>

1 个答案:

答案 0 :(得分:0)

使用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/