How about the following? BooleanQuery bq1 = new BooleanQuery(); bq1.add(new PrefixQuery(new Term("heading",word)),BooleanClause.Occur.SHOULD); bq1.add(new PrefixQuery(new Term("attribute",word)),BooleanClause.Occur.SHOULD);
BooleanQuery bq = new BooleanQuery(); bq.add(bq1, BooleanClause.Occur.MUST); if(subjectId.length()>0) bq.add(new PrefixQuery(new Term("subject_id",subjectId)), BooleanClause.Occur.MUST); I think bq should now be your desired query. -TCK On Mon, Dec 14, 2009 at 11:50 PM, Jacob Rhoden <jrho...@unimelb.edu.au>wrote: > Assume I have the following rather simple example that works fine: > > BooleanQuery bq = new BooleanQuery(); > bq.add(new PrefixQuery(new > Term("heading",word)),BooleanClause.Occur.SHOULD); > bq.add(new PrefixQuery(new > Term("attribute",word)),BooleanClause.Occur.SHOULD); > > Now I add the following and I assume its doing what it should be doing, not > what I expect it should be doing: > > BooleanQuery bq = new BooleanQuery(); > bq.add(new PrefixQuery(new > Term("heading",word)),BooleanClause.Occur.SHOULD); > bq.add(new PrefixQuery(new > Term("attribute",word)),BooleanClause.Occur.SHOULD); > if(subjectId.length()>0) > bq.add(new PrefixQuery(new > Term("subject_id",subjectId)),BooleanClause.Occur.MUST); > > This appears to be pulling out ALL records where "heading" matches or > "attribute" matches plus all records where "subject_id" matches. > > How do I make it return documents that match "heading" or "attribute" > within the "subject_id" subset? > > Kind regards, > Jacob Rhoden > > ____________________________________ > Information Technology Services, > The University of Melbourne > > Email: jrho...@unimelb.edu.au > Phone: +61 3 8344 2884 > Mobile: +61 4 1095 7575 > >