/// <summary>
        /// Prüft, ob ein Element veraltet ist und deswegen indexiert werden muss.
        /// <para>Das Element kann veraltet sein, indem es entweder noch gar nicht vorhanden ist oder wenn sich der Hash-Wert - also der Inhalt - verändert hat.
        /// Andernfalls muss man keine Anfrage an den Index-Service senden.</para>
        /// </summary>
        /// <param name="element">Das zu prüfende Element.</param>
        /// <returns>Gibt wahr zurück, wenn es veraltet ist und indexiert werden muss, ansonsten falsch.</returns>
        private bool HasContentChanged(Element element)
        {
            using ElementLogContext context = new ElementLogContext();
            var elementLog = context.GetElementLog(element, _jobConfig.Id);

            return(elementLog == null || !elementLog.Hash.Equals(element.Hash));
        }
        /// <summary>
        /// Prüft, ob das Element bereits im Index ist.
        /// </summary>
        /// <param name="element">Das Element, das auf Vorhandensein im Index geprüft werden soll.</param>
        /// <returns>Wahr, wenn es bereits vorhanden ist, ansonsten falsch.</returns>
        private bool IsAlreadyIndexed(Element element)
        {
            using ElementLogContext context = new ElementLogContext();
            var elementLog = context.GetElementLog(element, _jobConfig.Id);

            return(elementLog != null);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="element"></param>
 /// <param name="context"></param>
 /// <param name="isIndexingSuccess"></param>
 private void MarkElementFound(Element element, ElementLogContext context, bool isIndexingSuccess)
 {
     if (isIndexingSuccess)
     {
         context.SetElementFound(element, _jobConfig.Id, true);
         _log.Info(LocalizationService.FormatResourceString("CrawlerIndexerInterfaceMessage06", element.Id));
         StatisticService.GetService(_jobConfig.Id).IncreaseIndexedDocumentsCount();
     }
     else
     {
         _log.Error(LocalizationService.FormatResourceString("CrawlerIndexerInterfaceMessage08", element.Id));
         ErrorControlService.GetService().IncreaseErrorCount();
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="element"></param>
 /// <param name="isAlreadyIndexed"></param>
 /// <param name="hasContentChanged"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 private bool RemoveWhenChanged(Element element, bool isAlreadyIndexed, bool hasContentChanged, ElementLogContext context)
 {
     if (isAlreadyIndexed)
     {
         if (hasContentChanged)
         {
             _log.Info(LocalizationService.FormatResourceString("CrawlerIndexerInterfaceMessage02", element.Id));
             RemoveElementCompletly(element);
             return(true);
         }
         else
         {
             _log.Info(LocalizationService.FormatResourceString("CrawlerIndexerInterfaceMessage07", element.Id));
             StatisticService.GetService(_jobConfig.Id).IncreaseUnchangedDocumentsCount();
             context.SetElementFound(element, _jobConfig.Id, true);
             return(false);
         }
     }
     return(true);
 }