public virtual void TestEqualScoresWhenNoHits() // Test for LUCENE-5245: Empty MTQ rewrites should have a consistent norm, so always need to return a CSQ!
{
// NOTE: uses index build in *this* setUp
IndexSearcher search = NewSearcher(Reader);
ScoreDoc[] result;
TermQuery dummyTerm = new TermQuery(new Term("data", "1"));
BooleanQuery bq = new BooleanQuery();
bq.Add(dummyTerm, BooleanClause.Occur.SHOULD); // hits one doc
bq.Add(Csrq("data", "#", "#", T, T), BooleanClause.Occur.SHOULD); // hits no docs
result = search.Search(bq, null, 1000).ScoreDocs;
int numHits = result.Length;
AssertEquals("wrong number of results", 1, numHits);
float score = result[0].Score;
for (int i = 1; i < numHits; i++)
{
Assert.AreEqual(score, result[i].Score, SCORE_COMP_THRESH, "score for " + i + " was not the same");
}
bq = new BooleanQuery();
bq.Add(dummyTerm, BooleanClause.Occur.SHOULD); // hits one doc
bq.Add(Csrq("data", "#", "#", T, T, MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE), BooleanClause.Occur.SHOULD); // hits no docs
result = search.Search(bq, null, 1000).ScoreDocs;
numHits = result.Length;
AssertEquals("wrong number of results", 1, numHits);
for (int i = 0; i < numHits; i++)
{
Assert.AreEqual(score, result[i].Score, SCORE_COMP_THRESH, "score for " + i + " was not the same");
}
bq = new BooleanQuery();
bq.Add(dummyTerm, BooleanClause.Occur.SHOULD); // hits one doc
bq.Add(Csrq("data", "#", "#", T, T, MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT), BooleanClause.Occur.SHOULD); // hits no docs
result = search.Search(bq, null, 1000).ScoreDocs;
numHits = result.Length;
AssertEquals("wrong number of results", 1, numHits);
for (int i = 0; i < numHits; i++)
{
Assert.AreEqual(score, result[i].Score, SCORE_COMP_THRESH, "score for " + i + " was not the same");
}
}