private void AddTagValue(JObject doc, AlgoliaTagConfig tagConfig, JToken fieldValue)
        {
            var tagValues = new List <string>();

            var fieldValues = fieldValue as JArray;

            if (fieldValues != null)
            {
                List <string> values = tagValues;
                fieldValues.ForEach(t => values.Add((string)t));
            }
            else
            {
                tagValues.Add((string)fieldValue);
            }

            if (!string.IsNullOrWhiteSpace(tagConfig.TagPreffix))
            {
                tagValues = tagValues.Select(t => tagConfig.TagPreffix + t).ToList();
            }

            tagValues = tagValues.Distinct().ToList();

            var jtags = (JArray)doc[TagsFieldName] ?? new JArray();
            var tags  = jtags.ToObject <string[]>();

            tags = tags.Union(tagValues).ToArray();

            doc[TagsFieldName] = new JArray(tags);
        }
 public void AddTagConfig(AlgoliaTagConfig tag)
 {
     if (tag == null)
     {
         throw new ArgumentNullException(nameof(tag));
     }
     _tagsConfig.Add(tag);
 }
        private void AddTag(JObject doc, AlgoliaTagConfig tagConfig)
        {
            var fieldValue = doc[tagConfig.FieldName];

            if (fieldValue == null)
            {
                return;
            }

            if (tagConfig.HideField)
            {
                doc.Remove(tagConfig.FieldName);
            }

            AddTagValue(doc, tagConfig, fieldValue);
        }