public virtual void TestRandom() { Directory dir = NewDirectory(); int numDocs = AtLeast(1000); RandomIndexWriter w = new RandomIndexWriter( #if FEATURE_INSTANCE_TESTDATA_INITIALIZATION this, #endif Random, dir); int[] idToNum = new int[numDocs]; int maxValue = TestUtil.NextInt32(Random, 10, 1000000); for (int i = 0; i < numDocs; i++) { Document doc = new Document(); doc.Add(NewStringField("id", "" + i, Field.Store.YES)); int numTokens = TestUtil.NextInt32(Random, 1, 10); StringBuilder b = new StringBuilder(); for (int j = 0; j < numTokens; j++) { b.Append("a "); } doc.Add(NewTextField("field", b.ToString(), Field.Store.NO)); idToNum[i] = Random.Next(maxValue); doc.Add(new NumericDocValuesField("num", idToNum[i])); w.AddDocument(doc); } IndexReader r = w.GetReader(); w.Dispose(); IndexSearcher s = NewSearcher(r); int numHits = TestUtil.NextInt32(Random, 1, numDocs); bool reverse = Random.NextBoolean(); //System.out.println("numHits=" + numHits + " reverse=" + reverse); TopDocs hits = s.Search(new TermQuery(new Term("field", "a")), numHits); TopDocs hits2 = new QueryRescorerAnonymousInnerClassHelper3(this, new FixedScoreQuery(idToNum, reverse)) .Rescore(s, hits, numHits); int[] expected = new int[numHits]; for (int i = 0; i < numHits; i++) { expected[i] = hits.ScoreDocs[i].Doc; } int reverseInt = reverse ? -1 : 1; Array.Sort(expected, Comparer <int> .Create((a, b) => { int av = idToNum[Convert.ToInt32(r.Document(a).Get("id"))]; int bv = idToNum[Convert.ToInt32(r.Document(b).Get("id"))]; if (av < bv) { return(-reverseInt); } else if (bv < av) { return(reverseInt); } else { // Tie break by docID, ascending return(a - b); } }) ); bool fail = false; for (int i = 0; i < numHits; i++) { //System.out.println("expected=" + expected[i] + " vs " + hits2.ScoreDocs[i].Doc + " v=" + idToNum[Integer.parseInt(r.Document(expected[i]).Get("id"))]); if ((int)expected[i] != hits2.ScoreDocs[i].Doc) { //System.out.println(" diff!"); fail = true; } } Assert.IsFalse(fail); r.Dispose(); dir.Dispose(); }
public virtual void TestRandom() { Directory dir = NewDirectory(); int numDocs = AtLeast(1000); RandomIndexWriter w = new RandomIndexWriter(Random(), dir); int[] idToNum = new int[numDocs]; int maxValue = TestUtil.NextInt(Random(), 10, 1000000); for (int i = 0; i < numDocs; i++) { Document doc = new Document(); doc.Add(NewStringField("id", "" + i, Field.Store.YES)); int numTokens = TestUtil.NextInt(Random(), 1, 10); StringBuilder b = new StringBuilder(); for (int j = 0; j < numTokens; j++) { b.Append("a "); } doc.Add(NewTextField("field", b.ToString(), Field.Store.NO)); idToNum[i] = Random().Next(maxValue); doc.Add(new NumericDocValuesField("num", idToNum[i])); w.AddDocument(doc); } IndexReader r = w.Reader; w.Dispose(); IndexSearcher s = NewSearcher(r); int numHits = TestUtil.NextInt(Random(), 1, numDocs); bool reverse = Random().NextBoolean(); //System.out.println("numHits=" + numHits + " reverse=" + reverse); TopDocs hits = s.Search(new TermQuery(new Term("field", "a")), numHits); TopDocs hits2 = new QueryRescorerAnonymousInnerClassHelper3(this, new FixedScoreQuery(idToNum, reverse)) .Rescore(s, hits, numHits); int[] expected = new int[numHits]; for (int i = 0; i < numHits; i++) { expected[i] = hits.ScoreDocs[i].Doc; } int reverseInt = reverse ? -1 : 1; Array.Sort(expected, new ComparatorAnonymousInnerClassHelper(this, idToNum, r, reverseInt)); bool fail = false; for (int i = 0; i < numHits; i++) { //System.out.println("expected=" + expected[i] + " vs " + hits2.ScoreDocs[i].Doc + " v=" + idToNum[Integer.parseInt(r.Document(expected[i]).Get("id"))]); if ((int)expected[i] != hits2.ScoreDocs[i].Doc) { //System.out.println(" diff!"); fail = true; } } Assert.IsFalse(fail); r.Dispose(); dir.Dispose(); }