Sitecore Solr从索引中删除版本

8
我正在使用Sitecore 7和Solr搜索提供程序。 我目前已经设置好了当发布项目时更新搜索索引的站点。
我注意到,当CMS作者创建项目的不同版本并将其提交到索引中时,该项目的先前版本不会从索引中删除,因此索引包含多个相同的Sitecore项目版本。
有没有人知道任何可以更改的设置,以确保在添加新版本之前从索引中删除先前版本?
我尝试运行以下代码来删除项目,但是在发布之前它似乎无法删除索引上的任何内容。
var indexableItem = (SitecoreIndexableItem)item;
ContentSearchManager.GetIndex(index).Delete(indexableItem.UniqueId

任何帮助都非常感谢。

你是在说主库还是Web库?Web库只有每个项目的一个版本,因此它应该具有该版本。主库是您的主要存储库,应该拥有所有版本,例如页面编辑器/预览模式... - Mark Ursino
嗨,马克。我正在使用Web数据库。当用户在项目的版本下拉菜单中添加新版本并将其提交到搜索索引时,问题就会发生。该项将在solr索引中创建一个新的唯一版本。因此,我正在寻找一种方法,在此情况下从索引中删除先前的版本。 - Ian Graham
在您尝试删除它时,它是否会给您任何错误、警告或消息?还是它只是没有执行删除操作? - Shriroop
重建整个索引确实可以解决这个问题,但理想情况下不希望一直这样做;只有在发布项目时才将其添加到索引中。调用删除方法时我没有收到任何错误提示,并且在search.log或crawling log中也没有发现任何异常情况。 - Ian Graham
当然,只是想确保这不是索引重建的问题。ContentSearchManager.GetIndex(index).Update(indexableItem.UniqueId) 不起作用吗?否则就像Ben所说,联系支持部门。 - jammykam
显示剩余2条评论
2个回答

3

您真的需要删除旧版本吗?为您定义了一个虚拟字段,可用于筛选最新版本。只需将此属性添加到您的POCO(或基类)中,并在Linq查询中使用它进行过滤:

[IndexField("_lastestversion")]
public bool IsLatestVersion { get; set; }

请注意,字段名称在默认的Solr配置(_lastestversion)和Lucene配置(_latestversion)中是不同的。


嗨Ben,感谢你的建议。这似乎是一个合理的解决方法,但在索引中查看_latestversion字段对于所有版本都设置为true。 - Ian Graham
2
在这种情况下,我建议您联系Sitecore支持。他们可能有一个错误或者您的实例设置不正确。 - Ben Golden

3

我知道这是一个旧评论,但在Sitecore 7和8中存在一个错误(我们在8.0更新5中遇到了它),其中Solr不会从Web索引中删除旧版本。请参见https://kb.sitecore.net/articles/992608以获取修复方法。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接