public virtual void TestBoost()
{
// NOTE: uses index build in *this* setUp
IndexSearcher search = NewSearcher(Reader);
// test for correct application of query normalization
// must use a non score normalizing method for this.
search.Similarity = new DefaultSimilarity();
Query q = Csrq("data", "1", "6", T, T);
q.Boost = 100;
search.Search(q, null, new CollectorAnonymousInnerClassHelper(this));
//
// Ensure that boosting works to score one clause of a query higher
// than another.
//
Query q1 = Csrq("data", "A", "A", T, T); // matches document #0
q1.Boost = .1f;
Query q2 = Csrq("data", "Z", "Z", T, T); // matches document #1
BooleanQuery bq = new BooleanQuery(true);
bq.Add(q1, BooleanClause.Occur.SHOULD);
bq.Add(q2, BooleanClause.Occur.SHOULD);
ScoreDoc[] hits = search.Search(bq, null, 1000).ScoreDocs;
Assert.AreEqual(1, hits[0].Doc);
Assert.AreEqual(0, hits[1].Doc);
Assert.IsTrue(hits[0].Score > hits[1].Score);
q1 = Csrq("data", "A", "A", T, T, MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE); // matches document #0
q1.Boost = .1f;
q2 = Csrq("data", "Z", "Z", T, T, MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE); // matches document #1
bq = new BooleanQuery(true);
bq.Add(q1, BooleanClause.Occur.SHOULD);
bq.Add(q2, BooleanClause.Occur.SHOULD);
hits = search.Search(bq, null, 1000).ScoreDocs;
Assert.AreEqual(1, hits[0].Doc);
Assert.AreEqual(0, hits[1].Doc);
Assert.IsTrue(hits[0].Score > hits[1].Score);
q1 = Csrq("data", "A", "A", T, T); // matches document #0
q1.Boost = 10f;
q2 = Csrq("data", "Z", "Z", T, T); // matches document #1
bq = new BooleanQuery(true);
bq.Add(q1, BooleanClause.Occur.SHOULD);
bq.Add(q2, BooleanClause.Occur.SHOULD);
hits = search.Search(bq, null, 1000).ScoreDocs;
Assert.AreEqual(0, hits[0].Doc);
Assert.AreEqual(1, hits[1].Doc);
Assert.IsTrue(hits[0].Score > hits[1].Score);
}