Thanks for the explanation Mike.  It looks like I have no choice but to move
any queries which throw TooManyClauses to be Filters. Sadly, this means a
max query time of 6s under load unless I can find a way to rewrite the query
to span a Query and a Filter.


Thanks again



On Thu, Oct 15, 2009 at 6:52 PM, Michael McCandless <
luc...@mikemccandless.com> wrote:

> On Thu, Oct 15, 2009 at 4:57 AM, Shaun Senecal <ssenecal.w...@gmail.com>
> wrote:
>
> > Up to Lucene 2.4, this has been working out for us.  However, in
> > Lucene 2.9 this breaks since rewrite() now returns a
> > ConstantScoreQuery.
>
> You can get back to the 2.4 behavior by calling
> prefixQuery.setRewriteMethod(prefixQuery.SCORING_BOOLEAN_QUERY_REWRITE)
> before calling rewrite().
>
> > Is there a way I can know that a ConstantScoreQuery will match at
> > least 1 term (if not, I dont want to add it to the BooleanQuery)?
>
> There is a new method in 2.9: MultiTermQuery.getTotalNumberOfTerms(),
> which returns how many terms were visited during rewrite.  Would that
> work?
>
> > My understanding is that Lucene will apply the Filter (C | D) first,
> > limiting the result set, then apply the Query (A | B).  Is this
> > correct?
>
> Actually the filter & query clauses are AND'd in a sort of leapfrog
> fashion, taking turns skipping up to the other's doc ID and only
> accepting a doc ID when they both skip to the same point.  But this
> (the mechanics of how Lucene takes a filter into account) is an
> implementation detail and is likely to change.
>
> > If so, the end result is essentially the query: (A | B) & (C | D)
>
> Except that C, D contribute no scoring information, if scoring
> matters.  If scoring doesn't matter, entirely (even for A, B), you
> should use a collector that does not call score() at all to save CPU.
>
> Mike
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org
>
>

Reply via email to