public static TransformerBase GetTransformerInstance(TransformerDefinition definition)
        {
            var list = new List <string>
            {
                definition.TransformResults
            };

            var key = new CacheKey(list);
            Func <TransformerBase> createTransformer = () => IndexAndTransformerCompiler.Compile(definition);
            var result = TransformerCache.GetOrAdd(key, _ => new Lazy <TransformerBase>(createTransformer));

            return(result.Value);
        }
        public static StaticIndexBase GetIndexInstance(IndexDefinition definition)
        {
            var list = new List <string>();

            list.AddRange(definition.Maps);
            if (definition.Reduce != null)
            {
                list.Add(definition.Reduce);
            }

            var key = new CacheKey(list);
            Func <StaticIndexBase> createIndex = () => IndexAndTransformerCompiler.Compile(definition);
            var result = IndexCache.GetOrAdd(key, _ => new Lazy <StaticIndexBase>(createIndex));

            return(result.Value);
        }