Hello,
I have this requirment to only index that data, for searching, which is being used in some page. For example if I upload a document it shouldn't be available for search until I use it in some page. I found out this code online
ContentIndexer.Instance.Conventions.ForInstancesOf().ShouldIndex(x => { var contentRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance(); var contentSoftLinkRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance(); var softLinks = contentSoftLinkRepository.Load(x.ContentLink, true); try { foreach (var softLink in softLinks) { if (softLink.SoftLinkType == ReferenceType.ExternalReference || softLink.SoftLinkType == ReferenceType.ImageReference) { var content = contentRepository.Get(softLink.OwnerContentLink); if (!ContentIndexer.Instance.Conventions.ShouldIndexConvention.ShouldIndex(content).Value) // don't index referenced file if content is marked as not indexed { continue; } // only index if content is published var publicationStatus = content.PublishedInLanguage()[softLink.OwnerLanguage.Name]; if (publicationStatus != null && (publicationStatus.StartPublish == null || publicationStatus.StartPublish < DateTime.Now) && (publicationStatus.StopPublish == null || DateTime.Now < publicationStatus.StopPublish)) { return true; } } } } catch { // ooops something went wrong. Better not index this one ;-) } return false; });
This works when I attach softlinks. But lets say a page has a property called Content type and when I add something in there, lets say a block which has softlinks to that document, it doesn't work. I am stuck in there. Any hints?