Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Ross Ballantine 3 posts 74 karma points
    Feb 17, 2022 @ 13:43
    Ross Ballantine
    0

    Excluding node value from Examine index

    Hi, Is there any way in Umbrac v9 to exclude certain content values from the examine index? In this instance I have a multi-node treepicker used to highlight related content which I want to exclude from search indexing and showing up in the search results. Currently I have overridden the 'PerformingIndexValues' event to do this, but I can only see an option to add or combing values, instead of removing them from the Index (see code below).

    private void IndexProviderTransformingIndexValues(object sender, IndexingItemEventArgs args)
        {
            try
            {
    
                if (int.TryParse(args.ValueSet.Id, out var pageId))
                {
                    if (args.ValueSet.ItemType == "newsArticle") //Set news article custom index fields
                    {
                        using (UmbracoContextReference umbracoContextReference = _umbracoContextFactory.EnsureUmbracoContext())
                        {
                            var contentNode = umbracoContextReference.UmbracoContext.Content.GetById(pageId);
                            if (contentNode != null)
                                args = SetSearchableValues(args, contentNode);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "IndexProviderTransformingIndexValues: Exception: {0} | Message: {1} | Stack Trace: {2}", e.InnerException != null ? e.InnerException.ToString() : "", e.Message != null ? e.Message.ToString() : "", e.StackTrace);
            }
        }
    
        private IndexingItemEventArgs SetSearchableValues(IndexingItemEventArgs args, IPublishedContent contentNode)
        {
            try
            {
                var combinedFields = new StringBuilder();
    
                //Loop through all fields and combine into single string of searchable content
                foreach (var fieldValues in args.ValueSet.Values)
                {
                    foreach (var value in fieldValues.Value)
                    { 
                        if (value != null)
                            combinedFields.AppendLine(value.ToString());
                    }
                }
    
                //Index custom field values
                args.ValueSet.Add("searchHomepageKey", contentNode.AncestorOrSelf("homePage").Key.ToString());
                args.ValueSet.Add("searchParentKey", contentNode.Parent.Key.ToString());
                args.ValueSet.Set("searchCurrentKey", contentNode.Key.ToString());
                args.ValueSet.Add("searchableKeywords", combinedFields.ToString().ToLower());
                args.ValueSet.Set("sortableDate", contentNode.CreateDate.ToString("yyyyMMddHHmmss"));
    
            }
            catch (Exception e)
            {
                _logger.LogError(e, "SetSearchableValues: Exception: {0} | Message: {1} | Stack Trace: {2}", e.InnerException != null ? e.InnerException.ToString() : "", e.Message != null ? e.Message.ToString() : "", e.StackTrace);
            }
    
            return args;
        }
    

    Any help much appreciated.

Please Sign in or register to post replies

Write your reply to:

Draft