public void IndexNode(int id, bool isPublished) { if (!CurrentConfiguration.ConfigurationExists) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Warn, "No Solis Search configuration found in web.config, skipping indexing.", (Exception)null); } else { ICmsContent contentById = this.cmsIndexer.GetContentById(id); string indexRoot = CurrentConfiguration.SearchSettings.IndexRoot; if (indexRoot != this.cmsIndexer.CmsRootId) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, string.Format("IndexRoot is set to {0}, checking if node is descendant.", (object)indexRoot), (Exception)null); if (!((IEnumerable <string>)contentById.Path.Split(new string[1] { "," }, StringSplitOptions.RemoveEmptyEntries)).Contains <string>(this.cmsIndexer.CmsEntityFactory.ActualId(contentById.Id))) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, string.Format("Node path {0} does not contain indexRoot {1}, node will not be indexed.", (object)contentById.Path, (object)indexRoot), (Exception)null); return; } } this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, "Publishing document \"" + contentById.Name + "\", adding to Solr index.", (Exception)null); CmsSearchResultItem searchResultItem = this.GetCmsSearchResultItem(contentById); if (searchResultItem == null) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, "No indexitem to index", (Exception)null); } else { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, "Saving indexitem to index", (Exception)null); this.IndexItem(searchResultItem, isPublished); if (!searchResultItem.Documents.Any <string>()) { return; } foreach (string str in searchResultItem.Documents.Distinct <string>()) { ICmsMedia cmsMedia = this.cmsIndexer.ResolveMedia(str); if (cmsMedia != null) { this.IndexRichText(str, cmsMedia.Id.ToString((IFormatProvider)CultureInfo.InvariantCulture), searchResultItem.Acl, searchResultItem.Languages, searchResultItem.StartPublish, searchResultItem.EndPublish, searchResultItem.Id); } } } } }
public int IndexItems(List <CmsSearchResultItem> items) { var itemsPublished = Mapper.Map <List <CmsSearchResultItem>, List <CmsSearchResultItemPublished> >(items); ISolrOperations <CmsSearchResultItem> instance = ServiceLocator.Current.GetInstance <ISolrOperations <CmsSearchResultItem> >(); ISolrOperations <CmsSearchResultItemPublished> instancePublished = ServiceLocator.Current.GetInstance <ISolrOperations <CmsSearchResultItemPublished> >(); int int32 = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(items.Count) / new Decimal(100))); for (int index = 0; index < int32; ++index) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, string.Format("Indexing items {0} to {1}", (object)(100 * index), (object)(100 * (index + 1))), (Exception)null); List <CmsSearchResultItem> list = items.Skip <CmsSearchResultItem>(100 * index).Take <CmsSearchResultItem>(100 * (index + 1)).ToList <CmsSearchResultItem>(); List <CmsSearchResultItemPublished> listPublished = itemsPublished.Skip <CmsSearchResultItemPublished>(100 * index).Take <CmsSearchResultItemPublished>(100 * (index + 1)).ToList <CmsSearchResultItemPublished>(); instance.AddRange((IEnumerable <CmsSearchResultItem>)list); instancePublished.AddRange((IEnumerable <CmsSearchResultItemPublished>)listPublished); this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, "Indexing documents in collection", (Exception)null); foreach (CmsSearchResultItem searchResultItem in list.Where <CmsSearchResultItem>((Func <CmsSearchResultItem, bool>)(item => item.Documents.Any <string>()))) { foreach (string document in searchResultItem.Documents) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, "Finding media for document " + document, (Exception)null); ICmsMedia cmsMedia = this.cmsIndexer.ResolveMedia(document); if (cmsMedia != null) { this.log.AddLogentry(SolisSearch.Log.Enum.LogLevel.Debug, "Indexing media item " + cmsMedia.Name, (Exception)null); this.IndexRichText(document, cmsMedia.Id, searchResultItem.Acl, searchResultItem.Languages, searchResultItem.StartPublish, searchResultItem.EndPublish, searchResultItem.Id); } } } } instance.Commit(); instance.Optimize(); instancePublished.Commit(); instancePublished.Optimize(); return(items.Count); }