public override Query Rewrite(IndexReader reader, MultiTermQuery query) { Query result = new ConstantScoreQuery(new MultiTermQueryWrapperFilter <MultiTermQuery>(query)); result.Boost = query.Boost; return(result); }
//@Override public override bool Equals(System.Object obj) { if (this == obj) { return(true); } if (obj == null) { return(false); } if (GetType() != obj.GetType()) { return(false); } MultiTermQuery other = (MultiTermQuery)obj; if (System.Convert.ToInt32(Boost) != System.Convert.ToInt32(other.Boost)) { return(false); } if (!internalRewriteMethod.Equals(other.internalRewriteMethod)) { return(false); } return(true); }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { FilteredTermEnum enumerator = query.GetEnum(reader); BooleanQuery result = new BooleanQuery(true); int count = 0; try { do { Term t = enumerator.Term; if (t != null) { TermQuery tq = new TermQuery(t); // found a match tq.Boost = query.Boost * enumerator.Difference(); // set the boost result.Add(tq, Occur.SHOULD); // add to query count++; } }while (enumerator.Next()); } finally { enumerator.Close(); } query.IncTotalNumberOfTerms(count); return(result); }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { // Get the enum and start visiting terms. If we // exhaust the enum before hitting either of the // cutoffs, we use ConstantBooleanQueryRewrite; else, // ConstantFilterRewrite: ICollection <Term> pendingTerms = new List <Term>(); int docCountCutoff = (int)((docCountPercent / 100.0) * reader.MaxDoc); int termCountLimit = System.Math.Min(BooleanQuery.MaxClauseCount, termCountCutoff); int docVisitCount = 0; FilteredTermEnum enumerator = query.GetEnum(reader); try { while (true) { Term t = enumerator.Term; if (t != null) { pendingTerms.Add(t); // Loading the TermInfo from the terms dict here // should not be costly, because 1) the // query/filter will load the TermInfo when it // runs, and 2) the terms dict has a cache: docVisitCount += reader.DocFreq(t); } if (pendingTerms.Count >= termCountLimit || docVisitCount >= docCountCutoff) { // Too many terms -- make a filter. Query result = new ConstantScoreQuery(new MultiTermQueryWrapperFilter <MultiTermQuery>(query)); result.Boost = query.Boost; return(result); } else if (!enumerator.Next()) { // Enumeration is done, and we hit a small // enough number of terms & docs -- just make a // BooleanQuery, now BooleanQuery bq = new BooleanQuery(true); foreach (Term term in pendingTerms) { TermQuery tq = new TermQuery(term); bq.Add(tq, Occur.SHOULD); } // Strip scores Query result = new ConstantScoreQuery(new QueryWrapperFilter(bq)); result.Boost = query.Boost; query.IncTotalNumberOfTerms(pendingTerms.Count); return(result); } } } finally { enumerator.Close(); } }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { // strip the scores off Query result = new ConstantScoreQuery(new QueryWrapperFilter(base.Rewrite(reader, query))); result.Boost = query.Boost; return(result); }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { Query result = new ConstantScoreQuery(new MultiTermQueryWrapperFilter<MultiTermQuery>(query)); result.Boost = query.Boost; return result; }
public abstract Query Rewrite(IndexReader reader, MultiTermQuery query);
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { // Get the enum and start visiting terms. If we // exhaust the enum before hitting either of the // cutoffs, we use ConstantBooleanQueryRewrite; else, // ConstantFilterRewrite: ICollection<Term> pendingTerms = new List<Term>(); int docCountCutoff = (int) ((docCountPercent / 100.0) * reader.MaxDoc); int termCountLimit = System.Math.Min(BooleanQuery.MaxClauseCount, termCountCutoff); int docVisitCount = 0; FilteredTermEnum enumerator = query.GetEnum(reader); try { while (true) { Term t = enumerator.Term; if (t != null) { pendingTerms.Add(t); // Loading the TermInfo from the terms dict here // should not be costly, because 1) the // query/filter will load the TermInfo when it // runs, and 2) the terms dict has a cache: docVisitCount += reader.DocFreq(t); } if (pendingTerms.Count >= termCountLimit || docVisitCount >= docCountCutoff) { // Too many terms -- make a filter. Query result = new ConstantScoreQuery(new MultiTermQueryWrapperFilter<MultiTermQuery>(query)); result.Boost = query.Boost; return result; } else if (!enumerator.Next()) { // Enumeration is done, and we hit a small // enough number of terms & docs -- just make a // BooleanQuery, now BooleanQuery bq = new BooleanQuery(true); foreach(Term term in pendingTerms) { TermQuery tq = new TermQuery(term); bq.Add(tq, Occur.SHOULD); } // Strip scores Query result = new ConstantScoreQuery(new QueryWrapperFilter(bq)); result.Boost = query.Boost; query.IncTotalNumberOfTerms(pendingTerms.Count); return result; } } } finally { enumerator.Close(); } }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { // strip the scores off Query result = new ConstantScoreQuery(new QueryWrapperFilter(base.Rewrite(reader, query))); result.Boost = query.Boost; return result; }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { FilteredTermEnum enumerator = query.GetEnum(reader); BooleanQuery result = new BooleanQuery(true); int count = 0; try { do { Term t = enumerator.Term; if (t != null) { TermQuery tq = new TermQuery(t); // found a match tq.Boost = query.Boost * enumerator.Difference(); // set the boost result.Add(tq, Occur.SHOULD); // add to query count++; } } while (enumerator.Next()); } finally { enumerator.Close(); } query.IncTotalNumberOfTerms(count); return result; }
public abstract Query Rewrite(IndexReader reader, MultiTermQuery query);