Example #1
0
        public override Query Rewrite(IndexReader reader)
        {
            if (minNrShouldMatch == 0 && clauses.Count == 1)
            {
                // optimize 1-clause queries
                BooleanClause c = (BooleanClause)clauses[0];
                if (!c.IsProhibited())
                {
                    // just return clause

                    Query query = c.GetQuery().Rewrite(reader);                     // rewrite first

                    if (GetBoost() != 1.0f)
                    {
                        // incorporate boost
                        if (query == c.GetQuery())
                        {
                            // if rewrite was no-op
                            query = (Query)query.Clone();                              // then clone before boost
                        }
                        query.SetBoost(GetBoost() * query.GetBoost());
                    }

                    return(query);
                }
            }

            BooleanQuery clone = null;             // recursively rewrite

            for (int i = 0; i < clauses.Count; i++)
            {
                BooleanClause c     = (BooleanClause)clauses[i];
                Query         query = c.GetQuery().Rewrite(reader);
                if (query != c.GetQuery())
                {
                    // clause rewrote: must clone
                    if (clone == null)
                    {
                        clone = (BooleanQuery)this.Clone();
                    }
                    clone.clauses[i] = new BooleanClause(query, c.GetOccur());
                }
            }
            if (clone != null)
            {
                return(clone);                // some clauses rewrote
            }
            else
            {
                return(this);                // no clauses rewrote
            }
        }
Example #2
0
        /// <summary>check very basic hashCode and equals </summary>
        public static void  CheckHashEquals(Query q)
        {
            Query q2 = (Query)q.Clone();

            CheckEqual(q, q2);

            Query q3 = (Query)q.Clone();

            q3.SetBoost(7.21792348f);
            CheckUnequal(q, q3);

            // test that a class check is done so that no exception is thrown
            // in the implementation of equals()
            Query whacky = new AnonymousClassQuery();

            whacky.SetBoost(q.GetBoost());
            CheckUnequal(q, whacky);
        }
Example #3
0
        /// <summary>Optimize our representation and our subqueries representations</summary>
        /// <param name="reader">the IndexReader we query
        /// </param>
        /// <returns> an optimized copy of us (which may not be a copy if there is nothing to optimize)
        /// </returns>
        public override Query Rewrite(IndexReader reader)
        {
            int numDisjunctions = disjuncts.Count;

            if (numDisjunctions == 1)
            {
                Query singleton = (Query)disjuncts[0];
                Query result    = singleton.Rewrite(reader);
                if (GetBoost() != 1.0f)
                {
                    if (result == singleton)
                    {
                        result = (Query)result.Clone();
                    }
                    result.SetBoost(GetBoost() * result.GetBoost());
                }
                return(result);
            }
            DisjunctionMaxQuery clone = null;

            for (int i = 0; i < numDisjunctions; i++)
            {
                Query clause  = (Query)disjuncts[i];
                Query rewrite = clause.Rewrite(reader);
                if (rewrite != clause)
                {
                    if (clone == null)
                    {
                        clone = (DisjunctionMaxQuery)this.Clone();
                    }
                    clone.disjuncts[i] = rewrite;
                }
            }
            if (clone != null)
            {
                return(clone);
            }
            else
            {
                return(this);
            }
        }
Example #4
0
		/// <summary>check very basic hashCode and equals </summary>
		public static void  CheckHashEquals(Query q)
		{
			Query q2 = (Query) q.Clone();
			CheckEqual(q, q2);
			
			Query q3 = (Query) q.Clone();
			q3.SetBoost(7.21792348f);
			CheckUnequal(q, q3);
			
			// test that a class check is done so that no exception is thrown
			// in the implementation of equals()
			Query whacky = new AnonymousClassQuery();
			whacky.SetBoost(q.GetBoost());
			CheckUnequal(q, whacky);
		}
Example #5
0
 public void Add(Query query)
 {
     if (query is TermQuery)
     {
         AddTerm(((TermQuery)query).GetTerm(), query.GetBoost());
     }
     else if (query is PhraseQuery)
     {
         PhraseQuery pq = (PhraseQuery)query;
         Term[] terms = pq.GetTerms();
         HashMap<String, QueryPhraseMap> map = subMap;
         QueryPhraseMap qpm = null;
         foreach (Term term in terms)
         {
             qpm = GetOrNewMap(map, term.Text());
             map = qpm.subMap;
         }
         qpm.MarkTerminal(pq.GetSlop(), pq.GetBoost());
     }
     else
         throw new ApplicationException("query \"" + query.ToString() + "\" must be flatten first.");
 }
Example #6
0
 private string BoostToString(Query query)
 {
     var sb = new StringBuilder();
     var boost = query.GetBoost();
     if (boost != 1.0)
         sb.Append(", Boost(").Append(boost).Append(")");
     return sb.ToString();
 }