Esempio n. 1
0
 public virtual Explanation Explain(AtomicReader reader, int doc, Explanation innerExplanation)
 {
     if (reader is BoboSegmentReader)
     {
         BoboSegmentReader boboReader = (BoboSegmentReader)reader;
         object            dataObj    = boboReader.GetFacetData(m_timeFacetName);
         if (dataObj is FacetDataCache)
         {
             FacetDataCache    facetDataCache = (FacetDataCache)(boboReader.GetFacetData(m_timeFacetName));
             BigSegmentedArray orderArray     = facetDataCache.OrderArray;
             TermInt64List     termList       = (TermInt64List)facetDataCache.ValArray;
             Explanation       finalExpl      = new Explanation();
             finalExpl.AddDetail(innerExplanation);
             float rawScore   = innerExplanation.Value;
             long  timeVal    = termList.GetPrimitiveValue(orderArray.Get(doc));
             float timeScore  = ComputeTimeFactor(timeVal);
             float finalScore = CombineScores(timeScore, rawScore);
             finalExpl.Value       = finalScore;
             finalExpl.Description = "final score = (time score: " + timeScore + ") * (raw score: " + rawScore + "), timeVal: " + timeVal;
             return(finalExpl);
         }
         else
         {
             throw new InvalidOperationException("underlying facet data must be of type FacetDataCache<long>");
         }
     }
     else
     {
         throw new ArgumentException("reader not instance of " + typeof(BoboSegmentReader));
     }
 }
Esempio n. 2
0
        public override object[] GetRawFieldValues(BoboSegmentReader reader, int id)
        {
            FacetDataCache dataCache = GetFacetData <FacetDataCache>(reader);

            if (dataCache == null)
            {
                return(new string[0]);
            }
            int encoded = dataCache.OrderArray.Get(id);

            if (encoded == 0)
            {
                return(new object[0]);
            }
            else
            {
                int           count   = 1;
                List <Object> valList = new List <Object>(MAX_VAL_COUNT);

                while (encoded != 0)
                {
                    if ((encoded & 0x00000001) != 0x0)
                    {
                        valList.Add(dataCache.ValArray.GetRawValue(count));
                    }
                    count++;
                    encoded = (int)(((uint)encoded) >> 1);
                }
                return(valList.ToArray());
            }
        }
            public override IFacetCountCollector GetFacetCountCollector(BoboSegmentReader reader, int docBase)
            {
                MultiValueFacetDataCache dataCache    = m_parent.GetFacetData <MultiValueFacetDataCache>(reader);
                BigNestedInt32Array      _nestedArray = dataCache.NestedArray;

                return(new MultiRangeFacetCountCollector(m_parent.Name, dataCache, docBase, this.m_ospec, m_parent.m_predefinedRanges, _nestedArray));
            }
        public override string[] GetFieldValues(BoboSegmentReader reader, int id)
        {
            List <string> valList = new List <string>();

            foreach (IFacetHandler handler in m_facetHandlers)
            {
                StringBuilder buf       = new StringBuilder();
                bool          firsttime = true;
                string[]      vals      = handler.GetFieldValues(reader, id);
                if (vals != null && vals.Length > 0)
                {
                    if (!firsttime)
                    {
                        buf.Append(",");
                    }
                    else
                    {
                        firsttime = false;
                    }
                    foreach (string val in vals)
                    {
                        buf.Append(val);
                    }
                }
                valList.Add(buf.ToString());
            }
            return(valList.ToArray());
        }
Esempio n. 5
0
        public override double GetFacetSelectivity(BoboSegmentReader reader)
        {
            double selectivity = 0;
            MultiValueFacetDataCache dataCache = m_facetHandler.GetFacetData <MultiValueFacetDataCache>(reader);

            int[] idxes = m_valueConverter.Convert(dataCache, m_vals);
            if (idxes == null)
            {
                return(0.0);
            }
            int accumFreq = 0;

            foreach (int idx in idxes)
            {
                accumFreq += dataCache.Freqs[idx];
            }
            int total = reader.MaxDoc;

            selectivity = (double)accumFreq / (double)total;
            if (selectivity > 0.999)
            {
                selectivity = 1.0;
            }
            return(selectivity);
        }
        public override GeoFacetData Load(BoboSegmentReader reader)
        {
            GeoFacetData dataCache = new GeoFacetData();

            dataCache.Load(m_latFieldName, m_lonFieldName, reader);
            return(dataCache);
        }
Esempio n. 7
0
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
        {
            FacetDataCache dataCache = m_facetHandler.GetFacetData <FacetDataCache>(reader);

            int[] indexes = FacetDataCache.Convert(dataCache, m_vals);

            int bits;

            bits = 0x0;
            foreach (int i in indexes)
            {
                bits |= 0x00000001 << (i - 1);
            }

            int finalBits = bits;

            BigSegmentedArray orderArray = dataCache.OrderArray;

            if (indexes.Length == 0)
            {
                return(EmptyDocIdSet.Instance);
            }
            else
            {
                return(new CompactMultiValueFacetFilterDocIdSet(dataCache, indexes, finalBits, orderArray));
            }
        }
Esempio n. 8
0
            public FacetBasedBoostingScorer(FacetBasedBoostScorerBuilder parent, BoboSegmentReader reader, Scorer innerScorer)
                : base(innerScorer.Weight)
            {
                m_innerScorer = innerScorer;

                List <BoboDocScorer> list = new List <BoboDocScorer>();

                foreach (var boostEntry in parent.m_boostMaps)
                {
                    string        facetName = boostEntry.Key;
                    IFacetHandler handler   = reader.GetFacetHandler(facetName);
                    if (!(handler is IFacetScoreable))
                    {
                        throw new ArgumentException(facetName + " does not implement IFacetScoreable");
                    }
                    IFacetScoreable facetScoreable = (IFacetScoreable)handler;
                    BoboDocScorer   scorer         = facetScoreable.GetDocScorer(reader, parent.m_scoringFunctionFactory, boostEntry.Value);
                    if (scorer != null)
                    {
                        list.Add(scorer);
                    }
                }
                m_facetScorers = list.ToArray();
                m_docid        = -1;
            }
Esempio n. 9
0
        public override FacetDataCache Load(BoboSegmentReader reader)
        {
            FacetDataCache dataCache = new FacetDataCache();

            dataCache.Load(m_indexFieldName, reader, m_termListFactory);
            return(dataCache);
        }
        public override double GetFacetSelectivity(BoboSegmentReader reader)
        {
            double selectivity = m_innerFilter.GetFacetSelectivity(reader);

            selectivity = selectivity > 0.999 ? 0.0 : (1 - selectivity);
            return(selectivity);
        }
Esempio n. 11
0
            public override IFacetCountCollector GetFacetCountCollector(BoboSegmentReader reader, int docBase)
            {
                FacetDataCache latDataCache  = _latFacetHandler.GetFacetData <FacetDataCache>(reader);
                FacetDataCache longDataCache = _longFacetHandler.GetFacetData <FacetDataCache>(reader);

                return(new GeoSimpleFacetCountCollector(_name, latDataCache, longDataCache, docBase, _fspec, _list));
            }
        public virtual BoboDocScorer GetDocScorer(BoboSegmentReader reader, IFacetTermScoringFunctionFactory scoringFunctionFactory, IDictionary <string, float> boostMap)
        {
            MultiValueFacetDataCache dataCache = GetFacetData <MultiValueFacetDataCache>(reader);

            float[] boostList = BoboDocScorer.BuildBoostList(dataCache.ValArray, boostMap);
            return(new MultiValueDocScorer(dataCache, scoringFunctionFactory, boostList));
        }
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
        {
            RandomAccessDocIdSet innerDocIdSet    = m_innerFilter.GetRandomAccessDocIdSet(reader);
            DocIdSet             notInnerDocIdSet = new NotDocIdSet(innerDocIdSet, reader.MaxDoc);

            return(new NotRandomAccessDocIdSet(innerDocIdSet, notInnerDocIdSet));
        }
Esempio n. 14
0
        public override double GetFacetSelectivity(BoboSegmentReader reader)
        {
            double         selectivity = 0;
            FacetDataCache dataCache   = m_facetHandler.GetFacetData <FacetDataCache>(reader);
            int            accumFreq   = 0;

            foreach (string val in m_vals)
            {
                int idx = dataCache.ValArray.IndexOf(val);
                if (idx < 0)
                {
                    continue;
                }
                accumFreq += dataCache.Freqs[idx];
            }
            int total = reader.MaxDoc;

            selectivity = (double)accumFreq / (double)total;
            if (selectivity > 0.999)
            {
                selectivity = 1.0;
            }
            if (m_takeCompliment)
            {
                selectivity = 1.0 - selectivity;
            }
            return(selectivity);
        }
            public override IFacetCountCollector GetFacetCountCollector(BoboSegmentReader reader, int docBase)
            {
                FacetDataCache       dataCache     = (FacetDataCache)reader.GetFacetData(m_dataHandlerName);
                IFacetCountCollector baseCollector = m_baseCollectorSrc.GetFacetCountCollector(reader, docBase);

                return(new HistogramCollector(m_name, baseCollector, dataCache, m_ospec, m_start, m_end, m_unit));
            }
Esempio n. 16
0
        public override int GetNumItems(BoboSegmentReader reader, int id)
        {
            var            dependOnFacetHandler = GetDependedFacetHandler(m_dependsOnFacetName);
            FacetDataCache data = dependOnFacetHandler.GetFacetData <FacetDataCache>(reader);

            return(data.GetNumItems(id));
        }
Esempio n. 17
0
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
        {
            MultiValueFacetDataCache dataCache = m_facetHandler.GetFacetData <MultiValueFacetDataCache>(reader);

            int[] index = m_valueConverter.Convert(dataCache, m_vals);
            //BigNestedIntArray nestedArray = dataCache.NestedArray;
            OpenBitSet bitset = new OpenBitSet(dataCache.ValArray.Count);

            foreach (int i in index)
            {
                bitset.FastSet(i);
            }

            if (m_takeCompliment)
            {
                // flip the bits
                int size = dataCache.ValArray.Count;
                for (int i = 0; i < size; ++i)
                {
                    bitset.FastFlip(i);
                }
            }

            long count = bitset.Cardinality();

            if (count == 0)
            {
                return(new EmptyRandomAccessDocIdSet());
            }
            else
            {
                return(new MultiRandomAccessDocIdSet(dataCache, bitset));
            }
        }
Esempio n. 18
0
            public override Explanation Explain(AtomicReaderContext context, int docid)
            {
                BoboSegmentReader boboReader = (BoboSegmentReader)context.Reader;
                IFacetHandler     fhandler   = boboReader.GetFacetHandler(m_parent.m_name);

                if (fhandler != null)
                {
                    BoboDocScorer scorer = null;
                    if (fhandler is IFacetScoreable)
                    {
                        scorer = ((IFacetScoreable)fhandler).GetDocScorer(boboReader, m_parent.m_scoringFactory, m_parent.m_boostMap);
                        Explanation exp1 = scorer.Explain(docid);
                        Explanation exp2 = new Explanation(m_parent.Boost, "boost");
                        Explanation expl = new Explanation();
                        expl.Description = "product of:";
                        expl.Value       = (exp1.Value * exp2.Value);
                        expl.AddDetail(exp1);
                        expl.AddDetail(exp2);
                        return(expl);
                    }
                    else
                    {
                        return(null);
                    }
                }
                return(null);
            }
Esempio n. 19
0
 public MyScoreDoc(int docid, float score, DocIDPriorityQueue queue, BoboSegmentReader reader)
     : base(docid, score)
 {
     this.m_queue     = queue;
     this.m_reader    = reader;
     this.m_sortValue = null;
 }
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
        {
            int maxDoc = reader.MaxDoc;

            GeoFacetHandler.GeoFacetData dataCache = m_handler.GetFacetData <GeoFacetHandler.GeoFacetData>(reader);
            return(new GeoDocIdSet(dataCache.xValArray, dataCache.yValArray, dataCache.zValArray,
                                   m_lat, m_lon, m_rad, maxDoc, m_miles));
        }
Esempio n. 21
0
        public BoboSearcher(BoboSegmentReader reader)
            : base(reader)
        {
            m_facetCollectors = new List <FacetHitCollector>();
            var readerList = new List <BoboSegmentReader>();

            readerList.Add(reader);
            m_subReaders = readerList.ToArray();
        }
Esempio n. 22
0
        public override double GetFacetSelectivity(BoboSegmentReader reader)
        {
            double selectivity = m_facetFilter.GetFacetSelectivity(reader);

            if (m_takeComplement)
            {
                return(1.0 - selectivity);
            }
            return(selectivity);
        }
Esempio n. 23
0
        public override object[] GetRawFieldValues(BoboSegmentReader reader, int id)
        {
            FacetDataCache dataCache = GetFacetData <FacetDataCache>(reader);

            if (dataCache != null)
            {
                return(new object[] { dataCache.ValArray.GetRawValue(dataCache.OrderArray.Get(id)) });
            }
            return(new string[0]);
        }
        public override object[] GetRawFieldValues(BoboSegmentReader reader, int id)
        {
            MultiValueFacetDataCache dataCache = GetFacetData <MultiValueFacetDataCache>(reader);

            if (dataCache != null)
            {
                return(dataCache.NestedArray.GetRawData(id, dataCache.ValArray));
            }
            return(new string[0]);
        }
        public override int GetNumItems(BoboSegmentReader reader, int id)
        {
            MultiValueFacetDataCache data = GetFacetData <MultiValueFacetDataCache>(reader);

            if (data == null)
            {
                return(0);
            }
            return(data.GetNumItems(id));
        }
            public override IFacetCountCollector GetFacetCountCollector(BoboSegmentReader reader, int docBase)
            {
                var collectorList = new List <DefaultFacetCountCollector>(m_facetHandlers.Count);

                foreach (var facetHandler in m_facetHandlers)
                {
                    collectorList.Add((DefaultFacetCountCollector)facetHandler.GetFacetCountCollectorSource(m_sel, m_fspec).GetFacetCountCollector(reader, docBase));
                }
                return(new GroupbyFacetCountCollector(m_name, m_fspec, collectorList.ToArray(), reader.MaxDoc, m_sep));
            }
Esempio n. 27
0
 public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
 {
     if (m_vals.Length == 0)
     {
         return(EmptyDocIdSet.Instance);
     }
     else
     {
         return(new FacetOrRandomAccessDocIdSet(m_facetHandler, reader, m_vals, m_valueConverter, m_takeCompliment));
     }
 }
        public override DocComparer GetComparer(AtomicReader reader, int docbase)
        {
            if (!(reader is BoboSegmentReader))
            {
                throw new ArgumentException("reader must be instance of " + typeof(BoboSegmentReader).Name);
            }
            BoboSegmentReader        boboReader = (BoboSegmentReader)reader;
            MultiValueFacetDataCache dataCache  = (MultiValueFacetDataCache)m_cacheBuilder.Build(boboReader);

            return(new MultiFacetDocComparer(dataCache));
        }
 public override FacetDataNone Load(BoboSegmentReader reader)
 {
     m_dataFacetHandler = reader.GetFacetHandler(m_dataHandlerName);
     if (m_dataFacetHandler is RangeFacetHandler)
     {
         if (((RangeFacetHandler)m_dataFacetHandler).HasPredefinedRanges)
         {
             throw new NotSupportedException("underlying range facet handler should not have the predefined ranges");
         }
     }
     return(FacetDataNone.Instance);
 }
Esempio n. 30
0
        public override void SetNextReader(AtomicReaderContext context)
        {
            AtomicReader reader = context.AtomicReader;

            if (!(reader is BoboSegmentReader))
            {
                throw new ArgumentException("reader must be a BoboIndexReader");
            }
            m_currentReader = (BoboSegmentReader)reader;
            int docBase = context.DocBase;

            m_currentComparer = m_compSource.GetComparer(m_currentReader, docBase);
            m_currentQueue    = new DocIDPriorityQueue(m_currentComparer, m_numHits, docBase);
            if (m_groupBy != null)
            {
                if (m_facetCountCollectorMulti != null)  // _facetCountCollectorMulti.Length >= 1
                {
                    for (int i = 0; i < m_facetCountCollectorMulti.Length; ++i)
                    {
                        m_facetCountCollectorMulti[i] = m_groupByMulti[i].GetFacetCountCollectorSource(null, null, true).GetFacetCountCollector(m_currentReader, docBase);
                    }
                    //if (_facetCountCollector != null)
                    //    collectTotalGroups();
                    m_facetCountCollector = m_facetCountCollectorMulti[0];
                    if (m_facetAccessibleLists != null)
                    {
                        for (int i = 0; i < m_facetCountCollectorMulti.Length; ++i)
                        {
                            m_facetAccessibleLists[i].Add(m_facetCountCollectorMulti[i]);
                        }
                    }
                }
                if (m_currentValueDocMaps != null)
                {
                    m_currentValueDocMaps.Clear();
                }

                // NightOwl888: The _collectDocIdCache setting seems to put arrays into
                // memory, but then do nothing with the arrays. Seems wasteful and unnecessary.
                //if (contextList != null)
                //{
                //    _currentContext = new CollectorContext(_currentReader, docBase, _currentComparer);
                //    contextList.Add(_currentContext);
                //}
            }
            MyScoreDoc myScoreDoc = (MyScoreDoc)m_tmpScoreDoc;

            myScoreDoc.m_queue     = m_currentQueue;
            myScoreDoc.m_reader    = m_currentReader;
            myScoreDoc.m_sortValue = null;
            m_pqList.Add(m_currentQueue);
            m_queueFull = false;
        }