internal PathFacetCountCollector(string name, string sep, BrowseSelection sel, FacetSpec ospec, FacetDataCache dataCache)
        {
            _sel       = sel;
            _ospec     = ospec;
            _name      = name;
            _dataCache = dataCache;
            _sep       = sep;
            _sepArray  = sep.ToCharArray();
            _count     = new LazyBigIntArray(_dataCache.Freqs.Length);
            log.Info(name + ": " + _count.Size());
            _orderArray  = _dataCache.OrderArray;
            _minHitCount = ospec.MinHitCount;
            _maxCount    = ospec.MaxCount;
            if (_maxCount < 1)
            {
                _maxCount = _count.Size();
            }
            FacetSpec.FacetSortSpec sortOption = ospec.OrderBy;
            switch (sortOption)
            {
            case FacetSpec.FacetSortSpec.OrderHitsDesc: _comparatorFactory = new FacetHitcountComparatorFactory(); break;

            case FacetSpec.FacetSortSpec.OrderValueAsc: _comparatorFactory = null; break;

            case FacetSpec.FacetSortSpec.OrderByCustom: _comparatorFactory = ospec.CustomComparatorFactory; break;

            default: throw new ArgumentOutOfRangeException("invalid sort option: " + sortOption);
            }
            _splitPat   = new Regex(_sep, RegexOptions.Compiled);
            _stringData = new string[10];
            _patStart   = 0;
            _patEnd     = 0;
        }
        public TextProcessorService(IStatisticsHelperFactory statisticsHelperFactory, IComparatorFactory comparatorFactory)
        {
            Guard.IsNotNull(statisticsHelperFactory, () => statisticsHelperFactory);
            Guard.IsNotNull(comparatorFactory, () => comparatorFactory);

            _statisticsHelperFactory = statisticsHelperFactory;
            _comparatorFactory       = comparatorFactory;
        }