lucene2.4源码学习6 搜索 TooManyClauses

在lucene的搜索中不少情况会报TooManyClauses的错,这个是因为查询条件太多了。报错的具体原因我们来分析下。
在BooleanQuery:
  public void add(BooleanClause clause) {
    if (clauses.size() >= maxClauseCount)
      throw new TooManyClauses();

    clauses.add(clause);
  }


这个add方法是在不同查询的rewrite方法中调用的。如PrefixQuery的

public Query rewrite(IndexReader reader) throws IOException {
    BooleanQuery query = new BooleanQuery(true);
    TermEnum enumerator = reader.terms(prefix);
    try {
      String prefixText = prefix.text();
      String prefixField = prefix.field();
      do {
        Term term = enumerator.term();
        if (term != null &&
            term.text().startsWith(prefixText) &&
            term.field() == prefixField) // interned comparison 
        {
          TermQuery tq = new TermQuery(term);	  // found a match
          tq.setBoost(getBoost());                // set the boost
          query.add(tq, BooleanClause.Occur.SHOULD);		  // add to query
          //System.out.println("added " + term);
        } else {
          break;
        }
      } while (enumerator.next());
    } finally {
      enumerator.close();
    }
    return query;
  }


具体还有不查询会出现类似的情况,需要注意下的。

lucene2.4源码学习6 搜索 TooManyClauses


你可能感兴趣的:(Lucene,TooManyClauses)