[hibernate-dev] [HSEARCH] New Query API: last call
Emmanuel Bernard
emmanuel at hibernate.org
Thu Jun 10 03:48:57 EDT 2010
Please vote for:
- 1. or 2.
- matching vs whichMatches vs match
- matchingSentence vs basedOnSentence
- exclude vs excludeLimit
- if 2. findInRange vs findWithinRange
If you vote for 2., does the boolean query structural difference bother you?
1.
monthQb
.phrase()
.withSlop( 1 )
.onField( "mythology" )
.sentence( "Month whitening" );
monthQb
.keyword()
.onField( "monthValue" )
.matching( 2 ) //.whichMatches ?
.createQuery();
monthQb
.keyword()
.fuzzy()
.onField( "mythology" )
.matching( "draggon" ) //.whichMatches ?
.createQuery();
monthQb
.range()
.onField( "estimatedCreation" )
.from( from )
.to( to ).excludeLimit()
.createQuery();
monthQb
.bool()
.should( qb.....createQuery() )
.should( qb.....createQuery() )
.createQuery();
----------------------
2.
monthQb
.findPhrase()
.withSlop( 1 )
.onField( "mythology" )
.matchingSentence( "Month whitening" ) //basedOnSentence ?
.includingWord("snow", 2);;
monthQb
.findkeyword()
.onField( "monthValue" )
.matching( 2 )
.createQuery();
monthQb
.findKeyword()
.fuzzy()
.onField( "mythology" )
.matching( "draggon" )
.createQuery();
monthQb
.findInrange() // findWithinRange?
.onField( "estimatedCreation" )
.from( from )
.to( to ). excludeLimit()
.createQuery();
monthQb
.bool()
.should( qb.findKeyword().onField("mythology").matching("dragon").createQuery() )
.should( qb.....createQuery() )
.createQuery();
On 4 juin 2010, at 15:08, Emmanuel Bernard wrote:
> 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
>>>
>
>
> _______________________________________________
> 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