public virtual IEnumerable <BrowseFacet> GetFacets() { if (_ospec != null) { if (_predefinedRangeIndexes != null) { int minCount = _ospec.MinHitCount; //int maxNumOfFacets = _ospec.getMaxCount(); //if (maxNumOfFacets <= 0 || maxNumOfFacets > _predefinedRangeIndexes.length) maxNumOfFacets = _predefinedRangeIndexes.length; int[] rangeCount = new int[_predefinedRangeIndexes.Length]; for (int k = 0; k < _predefinedRangeIndexes.Length; ++k) { int count = 0; int idx = _predefinedRangeIndexes[k][0]; int end = _predefinedRangeIndexes[k][1]; while (idx < end) { count += _count.Get(idx++); } rangeCount[k] = count; } List <BrowseFacet> facetColl = new List <BrowseFacet>(_predefinedRanges.Count()); for (int k = 0; k < _predefinedRanges.Count(); ++k) { if (rangeCount[k] >= minCount) { BrowseFacet choice = new BrowseFacet(_predefinedRanges.ElementAt(k), rangeCount[k]); facetColl.Add(choice); } //if(facetColl.size() >= maxNumOfFacets) break; } return(facetColl); } else { return(FacetCountCollector_Fields.EMPTY_FACET_LIST); } } else { return(FacetCountCollector_Fields.EMPTY_FACET_LIST); } }
public virtual List <BrowseFacet> GetFacetsNew() { if (m_ospec != null) { if (m_predefinedRangeIndexes != null) { int minCount = m_ospec.MinHitCount; int maxNumOfFacets = m_ospec.MaxCount; if (maxNumOfFacets <= 0 || maxNumOfFacets > m_predefinedRangeIndexes.Length) { maxNumOfFacets = m_predefinedRangeIndexes.Length; } BigSegmentedArray rangeCount = new LazyBigInt32Array(m_predefinedRangeIndexes.Length); for (int k = 0; k < m_predefinedRangeIndexes.Length; ++k) { int count = 0; int idx = m_predefinedRangeIndexes[k][0]; int end = m_predefinedRangeIndexes[k][1]; while (idx <= end) { count += m_count.Get(idx++); } rangeCount.Add(k, count); } List <BrowseFacet> facetColl; FacetSpec.FacetSortSpec sortspec = m_ospec.OrderBy; if (sortspec == FacetSpec.FacetSortSpec.OrderValueAsc) { facetColl = new List <BrowseFacet>(maxNumOfFacets); for (int k = 0; k < m_predefinedRangeIndexes.Length; ++k) { if (rangeCount.Get(k) >= minCount) { BrowseFacet choice = new BrowseFacet(m_predefinedRanges.Get(k), rangeCount.Get(k)); facetColl.Add(choice); } if (facetColl.Count >= maxNumOfFacets) { break; } } } else //if (sortspec == FacetSortSpec.OrderHitsDesc) { IComparerFactory comparerFactory; if (sortspec == FacetSpec.FacetSortSpec.OrderHitsDesc) { comparerFactory = new FacetHitcountComparerFactory(); } else { comparerFactory = m_ospec.CustomComparerFactory; } if (comparerFactory == null) { throw new ArgumentException("facet comparer factory not specified"); } IComparer <int> comparer = comparerFactory.NewComparer(new RangeFacetCountCollectorFieldAccessor(m_predefinedRanges), rangeCount); int forbidden = -1; Int32BoundedPriorityQueue pq = new Int32BoundedPriorityQueue(comparer, maxNumOfFacets, forbidden); for (int i = 0; i < m_predefinedRangeIndexes.Length; ++i) { if (rangeCount.Get(i) >= minCount) { pq.Offer(i); } } int val; facetColl = new List <BrowseFacet>(); while ((val = pq.Poll()) != forbidden) { BrowseFacet facet = new BrowseFacet(m_predefinedRanges.ElementAt(val), rangeCount.Get(val)); facetColl.Insert(0, facet); } } return(facetColl); } else { return(FacetCountCollector.EMPTY_FACET_LIST); } } else { return(FacetCountCollector.EMPTY_FACET_LIST); } }