public virtual int DoConjunctions(int iter, int maxClauses) { int ret = 0; for (int i = 0; i < iter; i++) { int nClauses = Random.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); BitArray result = null; for (int j = 0; j < nClauses; j++) { result = AddClause(bq, result); } CountingHitCollector hc = Validate ? new MatchingHitCollector(result) : new CountingHitCollector(); s.Search(bq, hc); ret += hc.Sum; if (Validate) { Assert.AreEqual(result.Cardinality(), hc.Count); } // System.out.println(hc.getCount()); } return(ret); }
public virtual int DoNestedTermConjunctions(IndexSearcher s, int termsInIndex, int maxOuterClauses, int maxClauses, int iter) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int oClauses = Random.Next(maxOuterClauses - 1) + 2; BooleanQuery oq = new BooleanQuery(); for (int o = 0; o < oClauses; o++) { int nClauses = Random.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); BitArray termflag = new BitArray(termsInIndex); for (int j = 0; j < nClauses; j++) { int tnum; // don't pick same clause twice tnum = Random.Next(termsInIndex); if (termflag.SafeGet(tnum)) { tnum = termflag.NextClearBit(tnum); } if (tnum < 0 || tnum >= 25) { tnum = termflag.NextClearBit(0); } termflag.SafeSet(tnum, true); Query tq = new TermQuery(Terms[tnum]); bq.Add(tq, Occur.MUST); } // inner oq.Add(bq, Occur.MUST); } // outer CountingHitCollector hc = new CountingHitCollector(); s.Search(oq, hc); nMatches += hc.Count; ret += hc.Sum; } if (VERBOSE) { Console.WriteLine("Average number of matches=" + (nMatches / iter)); } return(ret); }
public virtual int DoNestedTermConjunctions(IndexSearcher s, int termsInIndex, int maxOuterClauses, int maxClauses, int iter) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int oClauses = r.Next(maxOuterClauses - 1) + 2; BooleanQuery oq = new BooleanQuery(); for (int o = 0; o < oClauses; o++) { int nClauses = r.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); System.Collections.BitArray termflag = new System.Collections.BitArray((termsInIndex % 64 == 0?termsInIndex / 64:termsInIndex / 64 + 1) * 64); for (int j = 0; j < nClauses; j++) { int tnum; // don't pick same clause twice tnum = r.Next(termsInIndex); if (termflag.Get(tnum)) { tnum = SupportClass.BitSetSupport.NextClearBit(termflag, tnum); } if (tnum < 0 || tnum >= 25) { tnum = SupportClass.BitSetSupport.NextClearBit(termflag, 0); } termflag.Set(tnum, true); Query tq = new TermQuery(terms[tnum]); bq.Add(tq, BooleanClause.Occur.MUST); } // inner oq.Add(bq, BooleanClause.Occur.MUST); } // outer CountingHitCollector hc = new CountingHitCollector(); s.Search(oq, hc); nMatches += hc.GetCount(); ret += hc.GetSum(); } System.Console.Out.WriteLine("Average number of matches=" + (nMatches / iter)); return(ret); }
public virtual int DoTermConjunctions(IndexSearcher s, int termsInIndex, int maxClauses, int iter) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int nClauses = Random.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); BitSet termflag = new BitSet(termsInIndex); for (int j = 0; j < nClauses; j++) { int tnum; // don't pick same clause twice tnum = Random.Next(termsInIndex); if (termflag.Get(tnum)) { tnum = termflag.NextClearBit(tnum); } if (tnum < 0 || tnum >= termsInIndex) { tnum = termflag.NextClearBit(0); } termflag.Set(tnum); Query tq = new TermQuery(terms[tnum]); bq.Add(tq, Occur.MUST); } CountingHitCollector hc = new CountingHitCollector(); s.Search(bq, hc); nMatches += hc.Count; ret += hc.Sum; } if (Verbose) { Console.WriteLine("Average number of matches=" + (nMatches / iter)); } return(ret); }
public virtual int DoSloppyPhrase(IndexSearcher s, int termsInIndex, int maxClauses, int iter) { int ret = 0; for (int i = 0; i < iter; i++) { int nClauses = Random.Next(maxClauses - 1) + 2; // min 2 clauses PhraseQuery q = new PhraseQuery(); for (int j = 0; j < nClauses; j++) { int tnum = Random.Next(termsInIndex); q.Add(new Term("f", char.ToString((char)(tnum + 'A'))), j); } q.Slop = termsInIndex; // this could be random too CountingHitCollector hc = new CountingHitCollector(); s.Search(q, hc); ret += hc.Sum; } return(ret); }
public virtual int DoNestedConjunctions(int iter, int maxOuterClauses, int maxClauses) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int oClauses = Random.Next(maxOuterClauses - 1) + 2; BooleanQuery oq = new BooleanQuery(); BitArray result = null; for (int o = 0; o < oClauses; o++) { int nClauses = Random.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); for (int j = 0; j < nClauses; j++) { result = AddClause(bq, result); } oq.Add(bq, Occur.MUST); } // outer CountingHitCollector hc = Validate ? new MatchingHitCollector(result) : new CountingHitCollector(); s.Search(oq, hc); nMatches += hc.Count; ret += hc.Sum; if (Validate) { Assert.AreEqual(result.Cardinality(), hc.Count); } // System.out.println(hc.getCount()); } if (VERBOSE) { Console.WriteLine("Average number of matches=" + (nMatches / iter)); } return(ret); }
public virtual int DoSloppyPhrase(IndexSearcher s, int termsInIndex, int maxClauses, int iter) { int ret = 0; for (int i = 0; i < iter; i++) { int nClauses = r.Next(maxClauses - 1) + 2; // min 2 clauses PhraseQuery q = new PhraseQuery(); for (int j = 0; j < nClauses; j++) { int tnum = r.Next(termsInIndex); q.Add(new Term("f", System.Convert.ToString((char)(tnum + 'A'))), j); } q.SetSlop(termsInIndex); // this could be random too CountingHitCollector hc = new CountingHitCollector(); s.Search(q, hc); ret += hc.GetSum(); } return ret; }
public virtual int DoNestedTermConjunctions(IndexSearcher s, int termsInIndex, int maxOuterClauses, int maxClauses, int iter) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int oClauses = r.Next(maxOuterClauses - 1) + 2; BooleanQuery oq = new BooleanQuery(); for (int o = 0; o < oClauses; o++) { int nClauses = r.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); System.Collections.BitArray termflag = new System.Collections.BitArray((termsInIndex % 64 == 0 ? termsInIndex / 64 : termsInIndex / 64 + 1) * 64); for (int j = 0; j < nClauses; j++) { int tnum; // don't pick same clause twice tnum = r.Next(termsInIndex); if (termflag.Get(tnum)) { int nextClearBit = -1; for (int k = tnum + 1; k < termflag.Count; k++) { if (!termflag.Get(k)) { nextClearBit = k; break; } } tnum = nextClearBit; } if (tnum < 0 || tnum >= 25) { int nextClearBit = -1; for (int k = 0; k < termflag.Count; k++) { if (!termflag.Get(k)) { nextClearBit = k; break; } } tnum = nextClearBit; } termflag.Set(tnum, true); Query tq = new TermQuery(terms[tnum]); bq.Add(tq, BooleanClause.Occur.MUST); } // inner oq.Add(bq, BooleanClause.Occur.MUST); } // outer CountingHitCollector hc = new CountingHitCollector(); s.Search(oq, hc); nMatches += hc.GetCount(); ret += hc.GetSum(); } System.Console.Out.WriteLine("Average number of matches=" + (nMatches / iter)); return ret; }
public virtual void TestBasic() { Directory dir = new MockRAMDirectory(); Analyzer analyzer = new StandardAnalyzer(); IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); writer.SetMergeFactor(2); writer.SetMaxBufferedDocs(2); writer.SetSimilarity(new SimpleSimilarity()); System.Text.StringBuilder sb = new System.Text.StringBuilder(265); System.String term = "term"; for (int i = 0; i < 30; i++) { Document d = new Document(); sb.Append(term).Append(" "); System.String content = sb.ToString(); Field noTf = new Field("noTf", content + (i % 2 == 0?"":" notf"), Field.Store.NO, Field.Index.ANALYZED); noTf.SetOmitTermFreqAndPositions(true); d.Add(noTf); Field tf = new Field("tf", content + (i % 2 == 0?" tf":""), Field.Store.NO, Field.Index.ANALYZED); d.Add(tf); writer.AddDocument(d); //System.out.println(d); } writer.Optimize(); // flush writer.Close(); _TestUtil.CheckIndex(dir); /* * Verify the index */ Searcher searcher = new IndexSearcher(dir); searcher.SetSimilarity(new SimpleSimilarity()); Term a = new Term("noTf", term); Term b = new Term("tf", term); Term c = new Term("noTf", "notf"); Term d2 = new Term("tf", "tf"); TermQuery q1 = new TermQuery(a); TermQuery q2 = new TermQuery(b); TermQuery q3 = new TermQuery(c); TermQuery q4 = new TermQuery(d2); searcher.Search(q1, new AnonymousClassCountingHitCollector(this)); //System.out.println(CountingHitCollector.getCount()); searcher.Search(q2, new AnonymousClassCountingHitCollector1(this)); //System.out.println(CountingHitCollector.getCount()); searcher.Search(q3, new AnonymousClassCountingHitCollector2(this)); //System.out.println(CountingHitCollector.getCount()); searcher.Search(q4, new AnonymousClassCountingHitCollector3(this)); //System.out.println(CountingHitCollector.getCount()); BooleanQuery bq = new BooleanQuery(); bq.Add(q1, Occur.MUST); bq.Add(q4, Occur.MUST); searcher.Search(bq, new AnonymousClassCountingHitCollector4(this)); Assert.IsTrue(15 == CountingHitCollector.GetCount()); searcher.Close(); dir.Close(); }
public virtual int DoNestedTermConjunctions(IndexSearcher s, int termsInIndex, int maxOuterClauses, int maxClauses, int iter) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int oClauses = Random().Next(maxOuterClauses - 1) + 2; BooleanQuery oq = new BooleanQuery(); for (int o = 0; o < oClauses; o++) { int nClauses = Random().Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); BitArray termflag = new BitArray(termsInIndex); for (int j = 0; j < nClauses; j++) { int tnum; // don't pick same clause twice tnum = Random().Next(termsInIndex); if (termflag.Get(tnum)) { tnum = termflag.NextClearBit(tnum); } if (tnum < 0 || tnum >= 25) { tnum = termflag.NextClearBit(0); } termflag.Set(tnum, true); Query tq = new TermQuery(Terms[tnum]); bq.Add(tq, BooleanClause.Occur.MUST); } // inner oq.Add(bq, BooleanClause.Occur.MUST); } // outer CountingHitCollector hc = new CountingHitCollector(); s.Search(oq, hc); nMatches += hc.Count; ret += hc.Sum; } if (VERBOSE) { Console.WriteLine("Average number of matches=" + (nMatches / iter)); } return ret; }
public virtual int DoTermConjunctions(IndexSearcher s, int termsInIndex, int maxClauses, int iter) { int ret = 0; long nMatches = 0; for (int i = 0; i < iter; i++) { int nClauses = r.Next(maxClauses - 1) + 2; // min 2 clauses BooleanQuery bq = new BooleanQuery(); System.Collections.BitArray termflag = new System.Collections.BitArray((termsInIndex % 64 == 0?termsInIndex / 64:termsInIndex / 64 + 1) * 64); for (int j = 0; j < nClauses; j++) { int tnum; // don't pick same clause twice tnum = r.Next(termsInIndex); if (termflag.Get(tnum)) tnum = BitSetSupport.NextClearBit(termflag, tnum); if (tnum < 0 || tnum >= termsInIndex) tnum = BitSetSupport.NextClearBit(termflag, 0); termflag.Set(tnum, true); Query tq = new TermQuery(terms[tnum]); bq.Add(tq, Occur.MUST); } CountingHitCollector hc = new CountingHitCollector(); s.Search(bq, hc); nMatches += hc.GetCount(); ret += hc.GetSum(); } System.Console.Out.WriteLine("Average number of matches=" + (nMatches / iter)); return ret; }