Guys, 
I'me now done with the level of abstraction and fluidity I wanted out of the 
query DSL. Please review before we push that out. Key features:
 - fluent API
 - use the field bridge system: type is passed, not raw string
 - use the analyzer transparently
 - simple use case simple, complex use cases possible

I'm showing below a few examples demonstrating key concepts.

Please comment / ask questions.

Term query
query = monthQb
        .keyword()
        .onField( "monthValue" )
        .matching( 2 ) //note that monthValue is of type int
        .createQuery();

//term query, showing analyzer integration
query = monthQb
        .keyword()
        .onField( "mythology_ngram" )
        .matching( "snobored" ) //we apply the ngram filter here
        .createQuery();

//use fuzzy query
query = monthQb
                .keyword()
                        .fuzzy()
                                .threshold( .8f ) //optional
                                .prefixLength( 1 )  //optional
                .onField( "mythology" )
                .matching( "calder" )
                .createQuery();

//use wildcard queries
monthQb
        .keyword()
                .wildcard()
        .onField( "mythology" )
        .matching( "mon*" )
        .createQuery();

Alternative option
//apply on multiple fields
monthQb.keyword()
        .onField( "mythology" )
                .boostedTo( 30 )
        .andField( "history" )
        .matching( "whitening" )
        .createQuery();

//boost a field
monthQb
        .keyword()
        .onField( "history" )
                .boostedTo( 30 )
        .matching( "whitening" )
        .createQuery();

Range query
//Range query
monthQb
        .range()
                .onField( "estimatedCreation" )
                .from( from ) #from and to are actual java.util.Date. We do the 
conversion
                .to( to ).exclude()
                .createQuery();

monthQb
        .range()
                .onField( "estimatedCreation" )
                .below( brithDay )
                .createQuery();

Phrase query
monthQb
        .phrase()
                .slop( 1 )
        .onField( "mythology" )
        .sentence( "Month whitening" )
        .createQuery();

Boolean query
monthQb
        .bool()
                .should( monthQb.keyword().onField( "mythology" ).matching( 
"whitening" ).createQuery() )
                .should( monthQb.keyword().onField( "history" ).matching( 
"whitening" ).createQuery() )
        .createQuery();

//Boolean query all except (recommended)
monthQb
        .all()
                .except( monthQb.keyword().onField( "mythology" ).matching( 
"colder" ).createQuery() )
        .createQuery();

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to