Exemplo n.º 1
0
        public override System.Collections.BitArray Bits(IndexReader reader)
        {
            object coreKey    = reader.GetFieldCacheKey();
            object delCoreKey = reader.HasDeletions() ? reader.GetDeletesCacheKey() : coreKey;

            object cached = cache.Get(reader, coreKey, delCoreKey);

            if (cached != null)
            {
                if (cached is System.Collections.BitArray)
                {
                    return((System.Collections.BitArray)cached);
                }
                else if (cached is DocIdBitSet)
                {
                    return(((DocIdBitSet)cached).GetBitSet());
                }
                // It would be nice to handle the DocIdSet case, but that's not really possible
            }

            System.Collections.BitArray bits = filter.Bits(reader);

            if (bits != null)
            {
                cache.Put(coreKey, delCoreKey, bits);
            }

            return(bits);
        }
Exemplo n.º 2
0
        // inherit javadoc
        public override TopFieldDocs Search(Weight weight, Filter filter, int nDocs, Sort sort)
        {
            Scorer scorer = weight.Scorer(reader);

            if (scorer == null)
            {
                return(new TopFieldDocs(0, new ScoreDoc[0], sort.fields, System.Single.NegativeInfinity));
            }

            System.Collections.BitArray bits = filter != null?filter.Bits(reader) : null;

            FieldSortedHitQueue hq = new FieldSortedHitQueue(reader, sort.fields, nDocs);

            int[] totalHits = new int[1];
            scorer.Score(new AnonymousClassHitCollector1(bits, totalHits, hq, this));

            ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
            for (int i = hq.Size() - 1; i >= 0; i--)
            {
                // put docs in array
                scoreDocs[i] = hq.FillFields((FieldDoc)hq.Pop());
            }

            return(new TopFieldDocs(totalHits[0], scoreDocs, hq.GetFields(), hq.GetMaxScore()));
        }
Exemplo n.º 3
0
        public override System.Collections.BitArray Bits(IndexReader reader)
        {
            if (cache == null)
            {
                cache = new System.Collections.Hashtable();
            }

            lock (cache.SyncRoot)
            {
                // check cache
                System.Collections.BitArray cached = (System.Collections.BitArray)cache[reader];
                if (cached != null)
                {
                    return(cached);
                }
            }

            System.Collections.BitArray bits = filter.Bits(reader);

            lock (cache.SyncRoot)
            {
                // update cache
                cache[reader] = bits;
            }

            return(bits);
        }
Exemplo n.º 4
0
        // inherit javadoc
        public override TopDocs Search(Weight weight, Filter filter, int nDocs)
        {
            if (nDocs <= 0)
            {
                // null might be returned from hq.top() below.
                throw new System.ArgumentException("nDocs must be > 0");
            }

            Scorer scorer = weight.Scorer(reader);

            if (scorer == null)
            {
                return(new TopDocs(0, new ScoreDoc[0], System.Single.NegativeInfinity));
            }

            System.Collections.BitArray bits = filter != null?filter.Bits(reader) : null;

            HitQueue hq = new HitQueue(nDocs);

            int[] totalHits = new int[1];
            scorer.Score(new AnonymousClassHitCollector(bits, totalHits, hq, nDocs, this));

            ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
            for (int i = hq.Size() - 1; i >= 0; i--)
            {
                // put docs in array
                scoreDocs[i] = (ScoreDoc)hq.Pop();
            }

            float maxScore = (totalHits[0] == 0) ? System.Single.NegativeInfinity : scoreDocs[0].score;

            return(new TopDocs(totalHits[0], scoreDocs, maxScore));
        }
Exemplo n.º 5
0
            public virtual Explanation Explain(IndexReader ir, int i)
            {
                Explanation inner = weight.Explain(ir, i);
                Filter      f     = Enclosing_Instance.filter;

                System.Collections.BitArray matches = f.Bits(ir);
                if (matches.Get(i))
                {
                    return(inner);
                }
                Explanation result = new Explanation(0.0f, "failure to match filter: " + f.ToString());

                result.AddDetail(inner);
                return(result);
            }
Exemplo n.º 6
0
        // inherit javadoc
        public override void  Search(Weight weight, Filter filter, HitCollector results)
        {
            HitCollector collector = results;

            if (filter != null)
            {
                System.Collections.BitArray bits = filter.Bits(reader);
                collector = new AnonymousClassHitCollector(bits, results, this);
            }

            Scorer scorer = weight.Scorer(reader);

            if (scorer == null)
            {
                return;
            }
            scorer.Score(collector);
        }
Exemplo n.º 7
0
            public virtual Explanation Explain(IndexReader ir, int i)
            {
                Explanation inner = weight.Explain(ir, i);

                if (Enclosing_Instance.GetBoost() != 1)
                {
                    Explanation preBoost = inner;
                    inner = new Explanation(inner.GetValue() * Enclosing_Instance.GetBoost(), "product of:");
                    inner.AddDetail(new Explanation(Enclosing_Instance.GetBoost(), "boost"));
                    inner.AddDetail(preBoost);
                }
                Filter f = Enclosing_Instance.filter;

                System.Collections.BitArray matches = f.Bits(ir);
                if (matches.Get(i))
                {
                    return(inner);
                }
                Explanation result = new Explanation(0.0f, "failure to match filter: " + f.ToString());

                result.AddDetail(inner);
                return(result);
            }
Exemplo n.º 8
0
        public override System.Collections.BitArray Bits(IndexReader reader)
        {
            if (cache == null)
            {
                cache = new SupportClass.WeakHashTable();
            }

            System.Object cached = null;
            lock (cache.SyncRoot)
            {
                // check cache
                cached = cache[reader];
            }

            if (cached != null)
            {
                if (cached is System.Collections.BitArray)
                {
                    return((System.Collections.BitArray)cached);
                }
                else if (cached is DocIdBitSet)
                {
                    return(((DocIdBitSet)cached).GetBitSet());
                }
                // It would be nice to handle the DocIdSet case, but that's not really possible
            }

            System.Collections.BitArray bits = filter.Bits(reader);

            lock (cache.SyncRoot)
            {
                // update cache
                cache[reader] = bits;
            }

            return(bits);
        }
Exemplo n.º 9
0
        // inherit javadoc
        public override void Search(Weight weight, Filter filter, HitCollector results)
        {
            HitCollector collector = results;
            if (filter != null)
            {
                System.Collections.BitArray bits = filter.Bits(reader);
                collector = new AnonymousClassHitCollector(bits, results, this);
            }

            Scorer scorer = weight.Scorer(reader);
            if (scorer == null)
                return ;
            scorer.Score(collector);
        }
Exemplo n.º 10
0
		// inherit javadoc
		public override TopFieldDocs Search(Weight weight, Filter filter, int nDocs, Sort sort)
		{
			Scorer scorer = weight.Scorer(reader);
			if (scorer == null)
				return new TopFieldDocs(0, new ScoreDoc[0], sort.fields, System.Single.NegativeInfinity);
			
			System.Collections.BitArray bits = filter != null ? filter.Bits(reader) : null;
			FieldSortedHitQueue hq = new FieldSortedHitQueue(reader, sort.fields, nDocs);
			int[] totalHits = new int[1];
			scorer.Score(new AnonymousClassHitCollector1(bits, totalHits, hq, this));
			
			ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
			for (int i = hq.Size() - 1; i >= 0; i--)
			// put docs in array
				scoreDocs[i] = hq.FillFields((FieldDoc) hq.Pop());
			
			return new TopFieldDocs(totalHits[0], scoreDocs, hq.GetFields(), hq.GetMaxScore());
		}
Exemplo n.º 11
0
		// inherit javadoc
		public override TopDocs Search(Weight weight, Filter filter, int nDocs)
		{
			
			if (nDocs <= 0)
			    // null might be returned from hq.top() below.
				throw new System.ArgumentException("nDocs must be > 0");
			
			Scorer scorer = weight.Scorer(reader);
			if (scorer == null)
				return new TopDocs(0, new ScoreDoc[0], System.Single.NegativeInfinity);
			
			System.Collections.BitArray bits = filter != null?filter.Bits(reader):null;
			HitQueue hq = new HitQueue(nDocs);
			int[] totalHits = new int[1];
			scorer.Score(new AnonymousClassHitCollector(bits, totalHits, hq, nDocs, this));
			
			ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
			for (int i = hq.Size() - 1; i >= 0; i--)
			    // put docs in array
				scoreDocs[i] = (ScoreDoc) hq.Pop();
			
			float maxScore = (totalHits[0] == 0) ? System.Single.NegativeInfinity : scoreDocs[0].score;
			
			return new TopDocs(totalHits[0], scoreDocs, maxScore);
		}
        /// <summary> Uses the {@link FilterManager} to keep the cache for a filter on the
        /// searcher side of a remote connection.
        /// </summary>
        /// <param name="reader">the index reader for the Filter
        /// </param>
        /// <returns> the bitset
        /// </returns>
        public override System.Collections.BitArray Bits(IndexReader reader)
        {
            Filter cachedFilter = FilterManager.GetInstance().GetFilter(filter);

            return(cachedFilter.Bits(reader));
        }