On Thu, 27 Aug 2009 10:48:42 +0200, Emmanuel Bernard <emman...@hibernate.org> wrote:
> Did I make my case? Yes. I can agree that your code is more readable and it will help building queries. That said, why not suggesting something like this to the Lucene folks directly. I agree on this one with Manik. --Hardy > String search = "harry potter"; > SealedQueryBuilder qb = searchFactory.withEntityAnalyzer(Book.class); > Query luceneQuery = > qb.searchInMultipleFields() > .onField("title").boostedTo(4) > .onField("title_ngram") > .onField("description") > .onField("description_ngram").boostedTo(.25) > .forWords(search); > > vs > > String search = "harry potter"; > Analyzer analyzer = searchFactory.getAnalyzer(Book.class); > Map<String,Float> boostPerField = new HashMap<String,Float>(2); // > boost factors > boostPerField.put( "title", (float) 4); > boostPerField.put( "title_ngram", (float) 1); > boostPerField.put( "description", (float) 1); > boostPerField.put( "description_ngram", (float) .25); > > BooleanQuery luceneQuery = new BooleanQuery(); > for ( Map.Entry<String, Float> entry : boostPerField.entrySet() ) { > final String fieldName = entry.getKey(); > final Float boost = entry.getValue(); > > List<String> terms = new ArrayList<String>(); > try { > Reader reader = new StringReader(search); > TokenStream stream = analyzer.tokenStream( fieldName, reader); > Token token = new Token(); > token = stream.next(token); > while (token != null) { > if (token.termLength() != 0) { > String term = new String(token.termBuffer(), 0, > token.termLength()); > terms.add( term ); > } > token = stream.next(token); > } > } > catch ( IOException e ) { > throw new RuntimeException("IO exception while reading String > stream??", e); > } > > for (String term : terms) { > TermQuery termQuery = new TermQuery( new Term( fieldName, term > ) ); > termQuery.setBoost( boost ); > luceneQuery.add( termQuery, BooleanClause.Occur.SHOULD ); > } > } > _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev