Example #1
0
 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);
                 }
             }
         }
     }
 }
Example #2
0
        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);
        }