Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
		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;
		}
Ejemplo n.º 8
0
		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;
		}
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 11
0
		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;
		}