thanks a lot On 2/28/07, Erick Erickson <[EMAIL PROTECTED]> wrote:
When you have a category, add the pair of clauses as a sub-Boolean query. Something like... try { PhraseQuery textQuery = new PhraseQuery(); PhraseQuery titleQuery = new PhraseQuery(); PhraseQuery catQuery = new PhraseQuery(); textQuery.setSlop( 20 ); titleQuery.setSlop( 4 ); bQueryPair = new BooleanQuery(); bQueryAll = new BooleanQuery(); for( int k = 0; k < phrase.length; k++ ) { textQuery.add( new Term( NAME, phrase[k] ) ); titleQuery.add( new Term( REVIEW, phrase[k] ) ); } bQueryPair.add( textQuery, BooleanClause.Occur.SHOULD ); bQueryPair.add( titleQuery, BooleanClause.Occur.SHOULD ); if(category!=null && !category.equals("")){ catQuery.add( new Term( TYPE, category ) ); bQueryAll.add(catQuery,BooleanClause.Occur.MUST); bQueryAll.add(bQueryPair, BooleanCluase.Occur.MUST) } else { bQueryAll = bQueryPair; } } catch( Exception e ) { throw new RuntimeException( "Unable to make any sense of the query.", e ); } and use bQueryAll in your query. And please be waaaay more elegant than the code I wrote <G>. Erick On 2/28/07, Ismail Siddiqui <[EMAIL PROTECTED]> wrote: > > Hey guys, > I want to filter a result set on a particular field..I have code like this > > try > { > PhraseQuery textQuery = new PhraseQuery(); > PhraseQuery titleQuery = new PhraseQuery(); > PhraseQuery catQuery = new PhraseQuery(); > textQuery.setSlop( 20 ); > titleQuery.setSlop( 4 ); > > for( int k = 0; k < phrase.length; k++ ) > { > textQuery.add( new Term( NAME, phrase[k] ) ); > titleQuery.add( new Term( REVIEW, phrase[k] ) ); > > > } > bQuery.add( textQuery, BooleanClause.Occur.SHOULD ); > bQuery.add( titleQuery, BooleanClause.Occur.SHOULD ); > > if(category!=null && !category.equals("")){ > catQuery.add( new Term( TYPE, category ) ); > bQuery.add(catQuery,BooleanClause.Occur.MUST); > > } > > } > catch( Exception e ) > { > throw new RuntimeException( "Unable to make any sense of the > query.", e ); > } > > > > Now the problem is its getting all results for a particular category > regardless the "phrase" is in the title or text field which make sense as > the other two have SHOULD clause. the problem is I can not set a MUST > clause > on the other two field as I need to match either one of the field. so what > i > want to is either title or text MUST have it and if category is not null > it > MUST have the category string passed. any ideas >