Пример #1
0
 internal TermListRandomAccessDocIdSet(string name, RandomAccessDocIdSet innerSet, IEnumerable <string> vals, IndexReader reader)
 {
     _name     = name;
     _innerSet = innerSet;
     _vals     = vals;
     _reader   = reader;
 }
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
        {
            RandomAccessDocIdSet innerDocIdSet    = m_innerFilter.GetRandomAccessDocIdSet(reader);
            DocIdSet             notInnerDocIdSet = new NotDocIdSet(innerDocIdSet, reader.MaxDoc);

            return(new NotRandomAccessDocIdSet(innerDocIdSet, notInnerDocIdSet));
        }
Пример #3
0
            public override sealed bool Validate(int docid)
            {
                FacetHitCollector.CurrentPointers miss = null;

                RandomAccessDocIdSet @set = _firsttime._currentPointers.DocIdSet;

                if (@set != null && [email protected](docid))
                {
                    miss = _firsttime._currentPointers;
                }
                _nextTarget = docid + 1;

                if (miss != null)
                {
                    miss.FacetCountCollector.Collect(docid);
                    return(false);
                }
                else
                {
                    foreach (IFacetCountCollector collector in _countCollectors)
                    {
                        collector.Collect(docid);
                    }
                    return(true);
                }
            }
Пример #4
0
 internal TermListRandomAccessDocIdSet(string name, RandomAccessDocIdSet innerSet, IList <string> vals, AtomicReader reader)
 {
     m_name     = name;
     m_innerSet = innerSet;
     m_vals     = vals;
     m_reader   = reader;
 }
Пример #5
0
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboIndexReader reader)
        {
            RandomAccessDocIdSet innerDocSet = _facetFilter.GetRandomAccessDocIdSet(reader);

            if (innerDocSet == EmptyDocIdSet.Instance)
            {
                return(innerDocSet);
            }

            FacetDataCache dataCache  = _facetDataCacheBuilder.Build(reader);
            int            totalCount = reader.MaxDoc;
            ITermValueList valArray   = dataCache.ValArray;
            int            freqCount  = 0;

            var validVals = new List <string>(_valSet.Count());

            foreach (string val in _valSet)
            {
                int idx = valArray.IndexOf(val);
                if (idx >= 0)
                {
                    validVals.Add(valArray.Get(idx));  // get and format the value
                    freqCount += dataCache.Freqs[idx];
                }
            }

            if (validVals.Count == 0)
            {
                return(EmptyDocIdSet.Instance);
            }

            // takeComplement is only used to choose between TermListRandomAccessDocIdSet and innerDocSet
            int validFreqCount = _takeComplement ? (totalCount - freqCount) : freqCount;

            if (_facetDataCacheBuilder.IndexFieldName != null && ((validFreqCount << 1) < totalCount))
            {
                return(new TermListRandomAccessDocIdSet(_facetDataCacheBuilder.IndexFieldName, innerDocSet, validVals, reader));
            }
            else
            {
                return(innerDocSet);
            }
        }
Пример #6
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 override Scorer Scorer(AtomicReaderContext context, bool scoreDocsInOrder, bool topScorer, Bits acceptDocs)
            public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs)
            {
                AtomicReader reader = context.AtomicReader;

                if (reader is BoboSegmentReader)
                {
                    BoboSegmentReader boboReader = (BoboSegmentReader)reader;
                    IFacetHandler     fhandler   = boboReader.GetFacetHandler(m_parent.m_name);
                    if (fhandler != null)
                    {
                        DocIdSetIterator   dociter = null;
                        RandomAccessFilter filter  = fhandler.BuildFilter(m_parent.m_sel);
                        if (filter != null)
                        {
                            RandomAccessDocIdSet docset = filter.GetRandomAccessDocIdSet(boboReader);
                            if (docset != null)
                            {
                                dociter = BuildIterator(docset, boboReader, acceptDocs);
                            }
                        }
                        if (dociter == null)
                        {
                            dociter = new MatchAllDocIdSetIterator(reader, acceptDocs);
                        }
                        BoboDocScorer scorer = null;
                        if (fhandler is IFacetScoreable)
                        {
                            scorer = ((IFacetScoreable)fhandler).GetDocScorer(boboReader, m_parent.m_scoringFactory, m_parent.m_boostMap);
                        }
                        return(new FacetTermScorer(m_parent, m_similarity, dociter, scorer));
                    }
                    else
                    {
                        logger.Error("FacetHandler is not defined for the field: " + m_parent.m_name);
                    }
                    return(null);
                }
                else
                {
                    throw new IOException("index reader not instance of " + typeof(BoboSegmentReader));
                }
            }
Пример #7
0
 public override Scorer Scorer(IndexReader reader, bool scoreDocsInOrder, bool topScorer)
 {
     if (reader is BoboIndexReader)
     {
         BoboIndexReader boboReader = (BoboIndexReader)reader;
         TermDocs        termDocs   = boboReader.TermDocs(null);
         IFacetHandler   fhandler   = boboReader.GetFacetHandler(parent._name);
         if (fhandler != null)
         {
             DocIdSetIterator   dociter = null;
             RandomAccessFilter filter  = fhandler.BuildFilter(parent._sel);
             if (filter != null)
             {
                 RandomAccessDocIdSet docset = filter.GetRandomAccessDocIdSet(boboReader);
                 if (docset != null)
                 {
                     dociter = BuildIterator(docset, termDocs);
                 }
             }
             if (dociter == null)
             {
                 dociter = new MatchAllDocIdSetIterator(reader);
             }
             BoboDocScorer scorer = null;
             if (fhandler is IFacetScoreable)
             {
                 scorer = ((IFacetScoreable)fhandler).GetDocScorer(boboReader, parent._scoringFactory, parent._boostMap);
             }
             return(new FacetTermScorer(parent, _similarity, dociter, scorer));
         }
         else
         {
             logger.Error("FacetHandler is not defined for the field: " + parent._name);
         }
         return(null);
     }
     else
     {
         throw new IOException("index reader not instance of " + typeof(BoboIndexReader));
     }
 }
Пример #8
0
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboIndexReader reader)
        {
            var count = _filters.Count();

            if (count == 1)
            {
                return(_filters.ElementAt(0).GetRandomAccessDocIdSet(reader));
            }
            else
            {
                List <DocIdSet>             list             = new List <DocIdSet>(count);
                List <RandomAccessDocIdSet> randomAccessList = new List <RandomAccessDocIdSet>(count);
                foreach (RandomAccessFilter f in _filters)
                {
                    RandomAccessDocIdSet s = f.GetRandomAccessDocIdSet(reader);
                    list.Add(s);
                    randomAccessList.Add(s);
                }
                RandomAccessDocIdSet[] randomAccessDocIdSets = randomAccessList.ToArray();
                DocIdSet andDocIdSet = new AndDocIdSet(list);
                return(new RandomAccessAndFilterSet(randomAccessDocIdSets, andDocIdSet));
            }
        }
Пример #9
0
        public override RandomAccessDocIdSet GetRandomAccessDocIdSet(BoboSegmentReader reader)
        {
            var count = m_filters.Count;

            if (count == 1)
            {
                return(m_filters[0].GetRandomAccessDocIdSet(reader));
            }
            else
            {
                List <DocIdSet>             list             = new List <DocIdSet>(count);
                List <RandomAccessDocIdSet> randomAccessList = new List <RandomAccessDocIdSet>(count);
                foreach (RandomAccessFilter f in m_filters)
                {
                    RandomAccessDocIdSet s = f.GetRandomAccessDocIdSet(reader);
                    list.Add(s);
                    randomAccessList.Add(s);
                }
                RandomAccessDocIdSet[] randomAccessDocIdSets = randomAccessList.ToArray();
                DocIdSet orDocIdSet = new OrDocIdSet(list);
                return(new RandomOrFilterDocIdSet(randomAccessDocIdSets, orDocIdSet));
            }
        }
 public NotRandomAccessDocIdSet(RandomAccessDocIdSet innerDocIdSet, DocIdSet notInnerDocIdSet)
 {
     this.innerDocIdSet    = innerDocIdSet;
     this.notInnerDocIdSet = notInnerDocIdSet;
 }
Пример #11
0
 public FacetTermQueryDocIdSetIterator(RandomAccessDocIdSet docset, BoboSegmentReader reader, IBits acceptDocs)
 {
     m_docset     = docset;
     m_maxDoc     = reader.MaxDoc;
     m_acceptDocs = acceptDocs;
 }
Пример #12
0
 private DocIdSetIterator BuildIterator(RandomAccessDocIdSet docset, BoboSegmentReader reader, IBits acceptDocs)
 {
     return(new FacetTermQueryDocIdSetIterator(docset, reader, acceptDocs));
 }
Пример #13
0
 public FacetTermQueryDocIdSetIterator(RandomAccessDocIdSet docset, TermDocs td)
 {
     _docset = docset;
     _td     = td;
 }
Пример #14
0
 private DocIdSetIterator BuildIterator(RandomAccessDocIdSet docset, TermDocs td)
 {
     return(new FacetTermQueryDocIdSetIterator(docset, td));
 }