// Random rnd is passed in so that the exact same random query may be created // more than once. public static BooleanQuery RandBoolQuery(System.Random rnd, int level, System.String field, System.String[] vals, TestBoolean2.Callback cb) { BooleanQuery current = new BooleanQuery(rnd.Next() < 0); for (int i = 0; i < rnd.Next(vals.Length) + 1; i++) { int qType = 0; // term query if (level > 0) { qType = rnd.Next(10); } Query q; if (qType < 7) q = new TermQuery(new Term(field, vals[rnd.Next(vals.Length)])); else q = RandBoolQuery(rnd, level - 1, field, vals, cb); int r = rnd.Next(10); BooleanClause.Occur occur; if (r < 2) occur = BooleanClause.Occur.MUST_NOT; else if (r < 5) occur = BooleanClause.Occur.MUST; else occur = BooleanClause.Occur.SHOULD; current.Add(q, occur); } if (cb != null) cb.PostCreate(current); return current; }
// Random rnd is passed in so that the exact same random query may be created // more than once. public static BooleanQuery RandBoolQuery(System.Random rnd, bool allowMust, int level, System.String field, System.String[] vals, TestBoolean2.Callback cb) { BooleanQuery current = new BooleanQuery(rnd.Next() < 0); for (int i = 0; i < rnd.Next(vals.Length) + 1; i++) { int qType = 0; // term query if (level > 0) { qType = rnd.Next(10); } Query q; if (qType < 3) { q = new TermQuery(new Term(field, vals[rnd.Next(vals.Length)])); } else if (qType < 7) { q = new WildcardQuery(new Term(field, "w*")); } else { q = RandBoolQuery(rnd, allowMust, level - 1, field, vals, cb); } int r = rnd.Next(10); Occur occur; if (r < 2) { occur = Occur.MUST_NOT; } else if (r < 5) { occur = allowMust ? Occur.MUST : Occur.SHOULD; } else { occur = Occur.SHOULD; } current.Add(q, occur); } if (cb != null) cb.PostCreate(current); return current; }