19 using Lucene.Net.Index;
23 namespace Lucene.Net.Search
42 private class AnonymousClassWeight:
Weight
44 public AnonymousClassWeight(Lucene.Net.Search.Weight weight, Lucene.Net.Search.Similarity similarity,
FilteredQuery enclosingInstance)
46 InitBlock(weight, similarity, enclosingInstance);
48 private class AnonymousClassScorer:
Scorer
50 private void InitBlock(Lucene.Net.Search.Scorer scorer, Lucene.Net.Search.DocIdSetIterator docIdSetIterator, AnonymousClassWeight enclosingInstance)
53 this.docIdSetIterator = docIdSetIterator;
54 this.enclosingInstance = enclosingInstance;
56 private Lucene.Net.Search.Scorer scorer;
57 private Lucene.Net.Search.DocIdSetIterator docIdSetIterator;
58 private AnonymousClassWeight enclosingInstance;
59 public AnonymousClassWeight Enclosing_Instance
63 return enclosingInstance;
67 internal AnonymousClassScorer(Lucene.Net.Search.Scorer scorer, Lucene.Net.Search.DocIdSetIterator docIdSetIterator, AnonymousClassWeight enclosingInstance, Lucene.Net.Search.Similarity Param1):base(Param1)
69 InitBlock(scorer, docIdSetIterator, enclosingInstance);
72 private int doc = - 1;
74 private int AdvanceToCommon(
int scorerDoc,
int disiDoc)
76 while (scorerDoc != disiDoc)
78 if (scorerDoc < disiDoc)
80 scorerDoc = scorer.Advance(disiDoc);
84 disiDoc = docIdSetIterator.Advance(scorerDoc);
90 public override int NextDoc()
92 int scorerDoc, disiDoc;
93 return doc = (disiDoc = docIdSetIterator.NextDoc()) != NO_MORE_DOCS && (scorerDoc = scorer.NextDoc()) != NO_MORE_DOCS && AdvanceToCommon(scorerDoc, disiDoc) != NO_MORE_DOCS?scorer.DocID():NO_MORE_DOCS;
95 public override int DocID()
100 public override int Advance(
int target)
102 int disiDoc, scorerDoc;
103 return doc = (disiDoc = docIdSetIterator.Advance(target)) != NO_MORE_DOCS && (scorerDoc = scorer.Advance(disiDoc)) != NO_MORE_DOCS && AdvanceToCommon(scorerDoc, disiDoc) != NO_MORE_DOCS?scorer.DocID():NO_MORE_DOCS;
106 public override float Score()
108 return Enclosing_Instance.Enclosing_Instance.Boost * scorer.Score();
111 private void InitBlock(Lucene.Net.Search.Weight weight, Lucene.Net.Search.Similarity similarity,
FilteredQuery enclosingInstance)
113 this.weight = weight;
114 this.similarity = similarity;
115 this.enclosingInstance = enclosingInstance;
117 private Lucene.Net.Search.
Weight weight;
118 private Lucene.Net.Search.Similarity similarity;
124 return enclosingInstance;
128 private float value_Renamed;
132 public override float Value
134 get {
return value_Renamed; }
137 public override float GetSumOfSquaredWeights()
139 return weight.GetSumOfSquaredWeights()*Enclosing_Instance.
Boost*Enclosing_Instance.Boost;
142 public override void Normalize(
float v)
145 value_Renamed = weight.Value * Enclosing_Instance.Boost;
150 if (Enclosing_Instance.Boost != 1)
153 inner =
new Explanation(inner.
Value * Enclosing_Instance.Boost,
"product of:");
157 Filter f = Enclosing_Instance.filter;
160 if (docIdSetIterator == null)
164 if (docIdSetIterator.
Advance(i) == i)
180 get {
return Enclosing_Instance; }
186 Scorer scorer = weight.Scorer(indexReader,
true,
false);
191 DocIdSet docIdSet = Enclosing_Instance.filter.GetDocIdSet(indexReader);
192 if (docIdSet == null)
197 if (docIdSetIterator == null)
202 return new AnonymousClassScorer(scorer, docIdSetIterator,
this, similarity);
206 internal Query query;
219 this.filter = filter;
227 Weight weight = query.CreateWeight(searcher);
228 Similarity similarity = query.GetSimilarity(searcher);
229 return new AnonymousClassWeight(weight, similarity,
this);
236 if (rewritten != query)
239 clone.query = rewritten;
250 get {
return query; }
255 get {
return filter; }
259 public override void ExtractTerms(System.Collections.Generic.ISet<
Term> terms)
265 public override System.String ToString(System.String s)
267 System.Text.StringBuilder buffer =
new System.Text.StringBuilder();
268 buffer.Append(
"filtered(");
269 buffer.Append(query.ToString(s));
270 buffer.Append(
")->");
271 buffer.Append(filter);
273 return buffer.ToString();
277 public override bool Equals(System.Object o)
282 return (query.Equals(fq.query) && filter.Equals(fq.filter) && Boost == fq.
Boost);
288 public override int GetHashCode()
290 return query.GetHashCode() ^ filter.GetHashCode() + System.Convert.ToInt32(Boost);