2016-01-28 188 views
2

我使用的SyncMaster lucence索引策略(因为我想实时数据)Sitecore的Lucene索引更新策略:SYNCMASTER

<strategies hint="list:AddStrategy"> 
    <strategy ref="contentSearch/indexUpdateStrategies/syncMaster" /> 
</strategies> 

我使用卢克 - Lucene索引工具箱查看索引文件。我想问的问题是,当我重建索引my_country_index。而且我知道sitecore中有6个国家项目为我重建索引。所以Luke我看到6个文件。

对于此项目的每一个更新ID为'{DEA26CDA-9EA9-4F67-BB3F-13CAF6A68061}'的上述项目之一,我看到一个额外的文件被添加(我看到与Like)。所以在索引中我有这个项目与新旧数据。这是否是syncMaster战略的正确行为。

+2

如果您未创建新版本,但只保存在索引中添加其他条目的项目,则可能会缺少索引配置中的_uniqueid字段:http://stackoverflow.com/a/26096271/5358985 –

+0

是的,你是对的我错过了'_uniqueid'字段。我添加了它,现在它的工作。谢谢!!!!你让我今天一整天都感觉很好。 – Kamran

回答

0

是的,如果您的索引与主数据库相关,则这是Sitecore中的正常行为。在Web数据库中,每个项目的语言只有一个版本。

您可以实现覆盖自定义行为定制的履带式:

public class CustomIndexCrawler : DatabaseCrawler 
{ 
    protected override void IndexVersion(Item item, Item latestVersion, Sitecore.Search.IndexUpdateContext context) 
    { 
    if (item.Versions.Count > 0 && item.Version.Number != latestVersion.Version.Number) 
     return; 

    base.IndexVersion(item, latestVersion, context); 
    } 
} 

这将迫使索引有一个项目刚刚过去的版本。您需要将此自定义爬虫分配给您的类

其他选项是当您查询结果以获取最新版本时。 您需要检查_latestversion是否等于1.

+0

非常感谢,每个文档的字段'_latestversion'总是如此,即使是旧的。我认为这是因为我在'local host'上工作,所以我使用'Master'数据库。 – Kamran