从 solr 索引中删除 sitecore 项目而不发布父项目

Delete sitecore item from solr index without publishing parent item

我遇到了业务需求,我想从 master 和 web 中删除项目,并从 solr 索引中删除相应的项目。企业不想发布父项,因为兄弟项或父项可能会发生变化,所以我无法触发任何策略,例如 onPublishEndAsynconPublishEndAsyncSingleInstance onPublishEndAsyncPreview 我在这里尝试类似下面的操作,但它不起作用

    var ParentItem = item.Parent;
                using (new EditContext(item))
                {
                    if (Sitecore.Configuration.Settings.RecycleBinActive)
                        item.Recycle();
                    else
                        item.Delete();
                }
                   if (item == null)
                return;
            ISearchIndex index = ContentSearchManager.GetIndex((SitecoreIndexableItem)ParentItem );
            if (index == null)
                return;
            index.Refresh(new SitecoreIndexableItem(ParentItem )); or 
           index.RefreshAsync(new SitecoreIndexableItem(item), IndexingOptions.ForcedIndexing, new System.Threading.CancellationToken());

我在 sitecore 日志或 solr 日志文件中没有收到任何错误,但索引没有删除项目

您可以将您的项目标记为不可发布,发布它(这将从 web 数据库和 web 索引中删除该项目),然后将其删除。

这是从所有发布目标数据库取消发布项目的示例代码:

using (new SecurityDisabler())
{
    var targets = PublishManager.GetPublishingTargets(item.Database)
        .Select(i => Database.GetDatabase(i[FieldIDs.PublishingTargetDatabase]))
        .ToArray();

    var languages = LanguageManager.GetLanguages(item.Database).ToArray();

    item.Editing.BeginEdit();
    item.Publishing.NeverPublish = true;
    item.Editing.EndEdit();

    var handle = PublishManager.PublishItem(item, targets, languages, false, false);
    PublishManager.WaitFor(handle);
}

之后只需执行item.RecycleDelete

前段时间我写了一篇博客 post 描述了如何添加一个功能区按钮,只需单击一下即可“删除并取消发布”项目。你可以在这里找到它:

Automatically unpublish deleted Sitecore item