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: System.Collections.ArrayList pendingTerms = new System.Collections.ArrayList(); int docCountCutoff = (int)((docCountPercent / 100.0) * reader.MaxDoc()); int termCountLimit = System.Math.Min(BooleanQuery.GetMaxClauseCount(), 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(query)); result.SetBoost(query.GetBoost()); return(result); } else if (!enumerator.Next()) { // Enumeration is done, and we hit a small // enough number of terms & docs -- just make a // BooleanQuery, now System.Collections.IEnumerator it = pendingTerms.GetEnumerator(); BooleanQuery bq = new BooleanQuery(true); while (it.MoveNext()) { TermQuery tq = new TermQuery((Term)it.Current); bq.Add(tq, BooleanClause.Occur.SHOULD); } // Strip scores Query result = new ConstantScoreQuery(new QueryWrapperFilter(bq)); result.SetBoost(query.GetBoost()); query.IncTotalNumberOfTerms(pendingTerms.Count); return(result); } } } finally { enumerator.Close(); } }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { Query result = new ConstantScoreQuery(new MultiTermQueryWrapperFilter(query)); result.SetBoost(query.GetBoost()); return(result); }
public virtual void TestCSQ4() { Query q = new ConstantScoreQuery(new ItemizedFilter(new int[] { 3 })); q.SetBoost(0); Bqtest(q, new int[] { 3 }); }
public virtual void TestCSQ3() { Query q = new ConstantScoreQuery(new ItemizedFilter(new int[] { 0, 2 })); q.SetBoost(1000); Qtest(q, new int[] { 0, 2 }); }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { // strip the scores off Query result = new ConstantScoreQuery(new QueryWrapperFilter(base.Rewrite(reader, query))); result.SetBoost(query.GetBoost()); return(result); }
public override Query Rewrite(IndexReader reader) { // Map to RangeFilter semantics which are slightly different... RangeFilter rangeFilt = new RangeFilter(fieldName, lowerVal != null ? lowerVal : "", upperVal, (System.Object)lowerVal == (System.Object) "" ? false : includeLower, upperVal == null ? false : includeUpper); Query q = new ConstantScoreQuery(rangeFilt); q.SetBoost(GetBoost()); return(q); }
public virtual void Test2() { BooleanQuery q = new BooleanQuery(); q.Add(qp.Parse("\"w1 w2\"~1"), Occur.MUST); q.Add(Snear(St("w2"), Sor("w5", "zz"), 4, true), Occur.SHOULD); q.Add(Snear(Sf("w3", 2), St("w2"), St("w3"), 5, true), Occur.SHOULD); Query t = new FilteredQuery(qp.Parse("xx"), new ItemizedFilter(new int[] { 1, 3 })); t.SetBoost(1000); q.Add(t, Occur.SHOULD); t = new ConstantScoreQuery(new ItemizedFilter(new int[] { 0, 2 })); t.SetBoost(-20.0f); q.Add(t, Occur.SHOULD); DisjunctionMaxQuery dm = new DisjunctionMaxQuery(0.2f); dm.Add(Snear(St("w2"), Sor("w5", "zz"), 4, true)); dm.Add(qp.Parse("QQ")); dm.Add(qp.Parse("xx yy -zz")); dm.Add(qp.Parse("-xx -w1")); DisjunctionMaxQuery dm2 = new DisjunctionMaxQuery(0.5f); dm2.Add(qp.Parse("w1")); dm2.Add(qp.Parse("w2")); dm2.Add(qp.Parse("w3")); dm.Add(dm2); q.Add(dm, Occur.SHOULD); BooleanQuery b = new BooleanQuery(); b.SetMinimumNumberShouldMatch(2); b.Add(Snear("w1", "w2", 1, true), Occur.SHOULD); b.Add(Snear("w2", "w3", 1, true), Occur.SHOULD); b.Add(Snear("w1", "w3", 3, true), Occur.SHOULD); b.SetBoost(0.0f); q.Add(b, Occur.SHOULD); Qtest(q, new int[] { 0, 1, 2 }); }
public virtual void Test1() { BooleanQuery q = new BooleanQuery(); q.Add(qp.Parse("\"w1 w2\"~1"), Occur.MUST); q.Add(Snear(St("w2"), Sor("w5", "zz"), 4, true), Occur.SHOULD); q.Add(Snear(Sf("w3", 2), St("w2"), St("w3"), 5, true), Occur.SHOULD); Query t = new FilteredQuery(qp.Parse("xx"), new ItemizedFilter(new int[]{1, 3})); t.SetBoost(1000); q.Add(t, Occur.SHOULD); t = new ConstantScoreQuery(new ItemizedFilter(new int[]{0, 2})); t.SetBoost(30); q.Add(t, Occur.SHOULD); DisjunctionMaxQuery dm = new DisjunctionMaxQuery(0.2f); dm.Add(Snear(St("w2"), Sor("w5", "zz"), 4, true)); dm.Add(qp.Parse("QQ")); dm.Add(qp.Parse("xx yy -zz")); dm.Add(qp.Parse("-xx -w1")); DisjunctionMaxQuery dm2 = new DisjunctionMaxQuery(0.5f); dm2.Add(qp.Parse("w1")); dm2.Add(qp.Parse("w2")); dm2.Add(qp.Parse("w3")); dm.Add(dm2); q.Add(dm, Occur.SHOULD); BooleanQuery b = new BooleanQuery(); b.SetMinimumNumberShouldMatch(2); b.Add(Snear("w1", "w2", 1, true), Occur.SHOULD); b.Add(Snear("w2", "w3", 1, true), Occur.SHOULD); b.Add(Snear("w1", "w3", 3, true), Occur.SHOULD); q.Add(b, Occur.SHOULD); Qtest(q, new int[]{0, 1, 2}); }
public override Query Rewrite(IndexReader reader) { // Map to RangeFilter semantics which are slightly different... RangeFilter rangeFilt = new RangeFilter(fieldName, lowerVal != null ? lowerVal : "", upperVal, (System.Object) lowerVal == (System.Object) ""?false:includeLower, upperVal == null?false:includeUpper); Query q = new ConstantScoreQuery(rangeFilt); q.SetBoost(GetBoost()); return q; }
public virtual void TestCSQ3() { Query q = new ConstantScoreQuery(new ItemizedFilter(new int[]{0, 2})); q.SetBoost(1000); Qtest(q, new int[]{0, 2}); }
public virtual void TestCSQ4() { Query q = new ConstantScoreQuery(new ItemizedFilter(new int[]{3})); q.SetBoost(0); Bqtest(q, new int[]{3}); }
public override Query Rewrite(IndexReader reader, MultiTermQuery query) { Query result = new ConstantScoreQuery(new MultiTermQueryWrapperFilter(query)); result.SetBoost(query.GetBoost()); 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: System.Collections.ArrayList pendingTerms = new System.Collections.ArrayList(); int docCountCutoff = (int) ((docCountPercent / 100.0) * reader.MaxDoc()); int termCountLimit = System.Math.Min(BooleanQuery.GetMaxClauseCount(), 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(query)); result.SetBoost(query.GetBoost()); return result; } else if (!enumerator.Next()) { // Enumeration is done, and we hit a small // enough number of terms & docs -- just make a // BooleanQuery, now System.Collections.IEnumerator it = pendingTerms.GetEnumerator(); BooleanQuery bq = new BooleanQuery(true); while (it.MoveNext()) { TermQuery tq = new TermQuery((Term) it.Current); bq.Add(tq, BooleanClause.Occur.SHOULD); } // Strip scores Query result = new ConstantScoreQuery(new QueryWrapperFilter(bq)); result.SetBoost(query.GetBoost()); 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.SetBoost(query.GetBoost()); return result; }