Exemplo 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));
     }
 }
Exemplo n.º 2
0
 public RecencyBoostScorer(RecencyBoostScorerBuilder parent, Scorer innerScorer, BigSegmentedArray orderArray, TermInt64List termList)
     : base(innerScorer.Weight)
 {
     m_parent      = parent;
     m_innerScorer = innerScorer;
     m_orderArray  = orderArray;
     m_termList    = termList;
 }
Exemplo n.º 3
0
 public DefaultInt64FacetIterator(TermInt64List valList, BigSegmentedArray countarray, int countlength, bool zeroBased)
 {
     m_valList             = valList;
     m_countlength         = countlength;
     _count                = countarray;
     m_countLengthMinusOne = m_countlength - 1;
     m_index               = -1;
     if (!zeroBased)
     {
         m_index++;
     }
     m_facet      = TermInt64List.VALUE_MISSING;
     base.m_count = 0;
 }
Exemplo n.º 4
0
        // NOTE: The Weight.Scorer method lost the scoreDocsInOrder and topScorer parameters between
        // Lucene 4.3.0 and 4.8.0. They are not used by BoboBrowse anyway, so the code here diverges
        // from the original Java source to remove these two parameters.

        // public virtual Scorer CreateScorer(Scorer innerScorer, AtomicReader reader, bool scoreDocsInOrder, bool topScorer)
        public virtual Scorer CreateScorer(Scorer innerScorer, AtomicReader reader)
        {
            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;
                    return(new RecencyBoostScorer(this, innerScorer, orderArray, termList));
                }
                else
                {
                    throw new InvalidOperationException("underlying facet data must be of type FacetDataCache<long>");
                }
            }
            else
            {
                throw new ArgumentException("reader not instance of " + typeof(BoboSegmentReader));
            }
        }
            private void Aggregate()
            {
                if (m_isAggregated)
                {
                    return;
                }

                m_isAggregated = true;

                int startIdx = m_valArray.IndexOf(m_start);

                if (startIdx < 0)
                {
                    startIdx = -(startIdx + 1);
                }

                int endIdx = m_valArray.IndexOf(m_end);

                if (endIdx < 0)
                {
                    endIdx = -(endIdx + 1);
                }

                BigSegmentedArray baseCounts = m_baseCollector.GetCountDistribution();

                if (m_start is long)
                {
                    long          start    = Convert.ToInt64(m_start);
                    long          unit     = Convert.ToInt64(m_unit);
                    TermInt64List valArray = (TermInt64List)m_valArray;
                    for (int i = startIdx; i < endIdx; i++)
                    {
                        long val = valArray.GetPrimitiveValue(i);
                        int  idx = (int)((val - start) / unit);
                        if (idx >= 0 && idx < m_count.Length)
                        {
                            m_count.Add(idx, m_count.Get(idx) + baseCounts.Get(i));
                        }
                    }
                }
                else if (m_start is int)
                {
                    int           start    = Convert.ToInt32(m_start);
                    int           unit     = Convert.ToInt32(m_unit);
                    TermInt32List valArray = (TermInt32List)m_valArray;
                    for (int i = startIdx; i < endIdx; i++)
                    {
                        int val = valArray.GetPrimitiveValue(i);
                        int idx = ((val - start) / unit);
                        if (idx >= 0 && idx < m_count.Length)
                        {
                            m_count.Add(idx, m_count.Get(idx) + baseCounts.Get(i));
                        }
                    }
                }
                else
                {
                    double start = Convert.ToDouble(m_start);
                    double unit  = Convert.ToDouble(m_unit);
                    for (int i = startIdx; i < endIdx; i++)
                    {
                        double val = (double)m_valArray.GetRawValue(i);
                        int    idx = (int)((val - start) / unit);
                        if (idx >= 0 && idx < m_count.Length)
                        {
                            m_count.Add(idx, m_count.Get(idx) + baseCounts.Get(i));
                        }
                    }
                }
            }