Exemplo n.º 1
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);
                }
            }
Exemplo n.º 2
0
            ///<summary>This method validates the doc against any multi-select enabled fields. </summary>
            ///<param name="docid"> </param>
            ///<returns>true if all fields matched </returns>
            public override sealed bool Validate(int docid)
            {
                FacetHitCollector.CurrentPointers miss = null;

                for (int i = 0; i < _numPostFilters; i++)
                {
                    FacetHitCollector.CurrentPointers cur = _collectors[i]._currentPointers;
                    int sid = cur.Doc;

                    if (sid < docid)
                    {
                        sid     = cur.PostDocIDSetIterator.Advance(docid);
                        cur.Doc = sid;
                        if (sid == DocIdSetIterator.NO_MORE_DOCS)
                        {
                            // move this to front so that the call can find the failure faster
                            FacetHitCollector tmp = _collectors[0];
                            _collectors[0] = _collectors[i];
                            _collectors[i] = tmp;
                        }
                    }

                    if (sid > docid) //mismatch
                    {
                        if (miss != null)
                        {
                            // failed because we already have a mismatch
                            _nextTarget = (miss.Doc < cur.Doc ? miss.Doc : cur.Doc);
                            return(false);
                        }
                        miss = cur;
                    }
                }

                _nextTarget = docid + 1;

                if (miss != null)
                {
                    miss.FacetCountCollector.Collect(docid);
                    return(false);
                }
                else
                {
                    foreach (IFacetCountCollector collector in _countCollectors)
                    {
                        collector.Collect(docid);
                    }
                    return(true);
                }
            }