Wang Han created LUCENE-5766:
--------------------------------

             Summary: bug in rewrite function of boolean query
                 Key: LUCENE-5766
                 URL: https://issues.apache.org/jira/browse/LUCENE-5766
             Project: Lucene - Core
          Issue Type: Bug
            Reporter: Wang Han


when optimize boolean query. When the only query sub clause has a boost with 
1.0, it should be cloned too. 

if (minNrShouldMatch == 0 && clauses.size() == 1) {                    // 
optimize 1-clause queries
      BooleanClause c = clauses.get(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.clone();         // then clone before boost
          }
          // Since the BooleanQuery only has 1 clause, the BooleanQuery will be
          // written out. Therefore the rewritten Query's boost must 
incorporate both
          // the clause's boost, and the boost of the BooleanQuery itself
          query.setBoost(getBoost() * query.getBoost());
        }

        return query;
      }
    }

when boolean query nested in a disjunction query, rewrite function return the 
original term query without clone and may cause bad boost value in upper 
queries. Delete the if statement and always do
 if (query == c.getQuery()) {                   // if rewrite was no-op
            query = query.clone();         // then clone before boost
          }
can fix this bug.

sample query may cause this bug: ((+((title:at)~1^2.0)))^4.5   after rewrite 
the query will be changed to  ((+((title:at)~1^9.0)))^4.5 and Query.clone() 
won't work for this problem because your lazy clone strategy.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to