[hibernate-dev] [HSEARCH] New Query API: last call
Emmanuel Bernard
emmanuel at hibernate.org
Fri Jun 4 09:08:02 EDT 2010
withSlop instead of slop looks like a good improvement (same for the fuzzy params etc)
I have not used phraseQuery() because what you get is not a query compared to createQuery(). That's why I think phrase is better than phraseQuery. But I'm open to other options.
matching vs sentence etc
There are definitely inconsistencies here :)
"keyword on field A matching B"
"range on field A from B to C"
findKeyword, findInRange, findPhrase would be better?
what about boolean queries?
If e use this verb approach, "matching" is better than "match"
"phrase on field A sentence" is wrong. I also want later in time to add the ability to set words with their position.
phrase().onField("A").includingWord("C", 2);
phrase().onField("A").includingWord("C", 2);
What would be an alternative to "sentence" then?
On 3 juin 2010, at 16:40, Sanne Grinovero wrote:
> It's looking very good; I'll seek a couple of hours this weekend to
> actually try it for real.
> I don't think it need changes, but if you seek for in depth-criticism
> I might add some additional fuel:
>
> I'm not 100% convinced about the use of "matching()" as method name,
> it confuses me a bit. This might be because of my non-native english,
> not sure.
> Doesn't "match()" sound better? "searchMatch" ?
>
> Having:
> monthQb
> .phrase()
> .slop( 1 )
> .onField( "mythology" )
> .sentence( "Month whitening" )
>
> Here "sentence" takes the same logical role as "matching" ?
>
> WDYT about
>
> monthQb
> .phraseQuery() // stress that's a kind of Query
> .havingSlop( 1 ) || .withSlop( 1 )
> .onField( "mythology" )
> .searchSentence( "Month whitening" )
> ?
> The method names are longer, but Imho there's a left part of the
> sentence and a right part of the sentence; the left part migh have
> options and be compound, the right part too. Waht is curretnyl missing
> to make it better readable is to choose appropriate nouns to have a
> clear separation to demark the end of the left part and the beginning
> of the right part.
> In the example above "slop" might look like a command, it sounds to me
> like "do a slop with option 1", of course that doesn't make sense, but
> is impairing readability.
>
> "searchSentence"
> "searchMatch"
> might be good delimiters for interpretation?
>
> Sanne
>
> 2010/6/3 Hardy Ferentschik <hibernate at ferentschik.de>:
>> Looks fine to me looking at the examples. I haven't tried myself writing
>> my own queries though
>> to see the full potential.
>>
>> On Wed, 02 Jun 2010 18:00:20 +0200, Emmanuel Bernard
>> <emmanuel at hibernate.org> wrote:
>>
>>> 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 at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
More information about the hibernate-dev
mailing list