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); }
// 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())); }
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); }
// 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)); }
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); }
// 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); }
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); }
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); }
// 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); }
// 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()); }
// 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)); }