Thanks for the reply Ian.

> I can't explain all of it and 3.0 is way old ... you might like to
> think about upgrading.

Yes, I agree but since there's a significant code base in place, it's a bigger 
project than I can take on at the moment.

> However in your first snippet you don't need the query AND the filter.
> Either one will suffice.  In some circumstances, as you say, filters
> are preferable but queries and filters are often interchangeable.

Yeah, that occurred to me too.  But how do I use only the filter?  The 
IndexSearcher class (in the version of Lucene I'm using anyway) does not have a 
search method that takes only a Filter.  The closest it has is:

IndexSearcher.search(Weight, Filter, Collector)

The documentation on the Weight parameter is kind of sparse.  In the javadoc 
for that method it just says:

weight - to match documents

Looking at the Weight class, it says to instantiate a Weight instance with 
Query.createWeight(Searcher).  So now I'm back to having to have a query again. 
 

> On the rest of it, I don't know what is going on.  What java classes
> are you getting back from QueryParser?  Giving it a variable name of
> prefixQuery doesn't make it so - what does
> prefixQuery.getClass().getName() say?

It's definitely returning a PrefixQuery.  I checked that early on.

thanks again,

Bill

--
Ian.


On Thu, Aug 15, 2013 at 6:43 PM, Bill Chesky
<bill.che...@learninga-z.com> wrote:
> Hello,
>
> I know this is a perennial question here because I've spent a lot of time 
> searching for an answer.  I've seen the discussions about the TooManyClauses 
> exception and I understand generally why you get the it.  I see lots of 
> discussion about using filters to avoid it but I still can't get it to work.  
> I think I'm just missing something fundamental.
>
> I'm using Lucene 3.0.
>
> I'm trying to do prefix queries on an index.  I figured there might be times 
> where I might run into the TooManyClauses exception so from reading 
> discussions on the issue I figured I should use a filter.  I found the 
> PrefixFilter class and began experimenting with it.  E.g. this works:
>
> QueryParser queryParser = new QueryParser(Version.LUCENE_30, "my_field", new 
> StandardAnalyzer(Version.LUCENE_30));
> Query prefixQuery = queryParser.parse("t*");
> PrefixFilter prefixFilter = new PrefixFilter(new Term("my_field", "t"));
> indexSearcher.search(prefixQuery, prefixFilter, collector);
>
> This returns about 5000 hits on my index.
>
> But then I discovered that it works just as well without the filter:
>
> QueryParser queryParser = new QueryParser(Version.LUCENE_30, "my_field", new 
> StandardAnalyzer(Version.LUCENE_30));
> Query prefixQuery = queryParser.parse("t*");
> indexSearcher.search(prefixQuery, collector);
>
> Why, I don't know.  Seems like this would get expanded out into 5000 
> BooleanQueries and since my max clause count is still set to the default 1024 
> I should get the exception.  But I didn't.  So maybe I don't need the filter 
> after all?
>
> Next, I need scoring to work.  I read that with wildcard queries all scores 
> are set to 1.0 by default.  But I read you can use the 
> QueryParser.setMultiTermRewriteMethod() method to take scoring into account 
> again.  So I tried:
>
> QueryParser queryParser = new QueryParser(Version.LUCENE_30, "my_field", new 
> StandardAnalyzer(Version.LUCENE_30));
> queryParser.setMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
> Query prefixQuery = queryParser.parse("t*");
> indexSearcher.search(prefixQuery, collector);
>
> Now, I get the TooManyClauses exception.
>
> I tried adding the PrefixFilter back in but with no luck.  Still get the 
> exception.
>
> Again, sorry if this has been discussed before.  Just not seeing an answer to 
> this after much searching and I just don't understand what is going on here.  
> Any help appreciated.  Links welcome.
>
> Bill
>

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




---------------------------------------------------------------------
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