private void ReindexVariations(IEnumerable <string> variantCodes) { var clients = _vulcanHandler.GetClients(); if (clients?.Any() != true) { return; } var codes = variantCodes as IList <string> ?? variantCodes.ToList(); foreach (var client in clients) { foreach (var variantCode in codes) { var variantLink = _referenceConverter.GetContentLink(variantCode); if (ContentReference.IsNullOrEmpty(variantLink)) { continue; } var variant = _contentLoader.Get <IContent>(variantLink, client.Language); if (variant == null) { continue; } var existing = client.SearchContent <VariationContent>(s => s.Query(q => q.Term(v => v.Code, variantCode))); if (existing.Total > 0) { client.IndexContent(variant); } } } }
/// <summary> /// Search /// </summary> /// <param name="query"></param> /// <returns></returns> public virtual IEnumerable <SearchResult> Search(Query query) { List <ContentReference> searchRoots = null; var searchText = query.SearchQuery; if (query.SearchRoots?.Any() == true) { searchRoots = new List <ContentReference>(); foreach (var item in query.SearchRoots) { if (ContentReference.TryParse(item, out var c)) { searchRoots.Add(c); } } } var typeRestriction = typeof(TContent).GetSearchTypesFor(VulcanFieldConstants.DefaultFilter); // Special condition for BlockData since it doesn't derive from BlockData if (typeof(TContent) == typeof(VulcanContentHit)) { typeRestriction = typeof(BlockData).GetSearchTypesFor(VulcanFieldConstants.DefaultFilter); } var hits = new List <ISearchResponse <IContent> >(); var clients = VulcanHandler.GetClients(); if (clients != null) { // ReSharper disable once LoopCanBeConvertedToQuery foreach (var client in clients) { if (client.Language.Equals(CultureInfo.InvariantCulture) && !IncludeInvariant) { continue; } var clientHits = client.SearchContent <IContent>(d => d .Take(query.MaxResults) .FielddataFields(fs => fs.Field(p => p.ContentLink)) // only return id for performance .Query(x => x.SimpleQueryString(sqs => sqs.Fields(f => f .AllAnalyzed() .Field($"{VulcanFieldConstants.MediaContents}.content") .Field($"{VulcanFieldConstants.MediaContents}.content_type")) .Query(searchText)) ), typeFilter: typeRestriction, includeNeutralLanguage: client.Language.Equals(CultureInfo.InvariantCulture), rootReferences: searchRoots, principleReadFilter: UserExtensions.GetUser() ); if (clientHits?.Total > 0) { hits.Add(clientHits); } } } var results = hits.SelectMany(h => h.Hits.Select(CreateSearchResult)); return(results); }