[hibernate-dev] [infinispan-dev] [HSearch] DSL for Lucene queries (was: Re: Query module new API and configurations)

Emmanuel Bernard emmanuel at hibernate.org
Thu Aug 27 08:06:58 EDT 2009


On 27 août 09, at 13:07, Manik Surtani wrote:

> Very elegant.  I'm generally a big fan of 'builder' patterns like  
> this, but this really isn't a DSL, is it?  :)  When you first  
> mentioned a DSL I had visions of defining a new grammar and an ANTLR  
> parser, etc.  But that is overkill.

This is called an internal DSL, ie you use Java as the language, not  
some external representation.

>
> This approach certainly works, and will almost certainly perform  
> better too.  One question: for the sake of brevity, why  
> SealedQueryBuilder instead of QueryBuilder ?  :)

The name is not right yet

There are two things:
  - the query builder that lets you define the analyzer
  - the query builder that has an analyzer assigned and lets you build  
query
What name is best for each of them.

>
> Also, I still think that if this is a generic helper factory that  
> helps you build Lucene queries - and has no knowledge of how and  
> where the query is used (why should it?) - then this should be  
> something people can use outside of HS or Infinispan.  E.g.,  
> directly with Lucene.

As of today this code is technically pure Lucene but to be honest the  
idea of passing an analyzer multiplexer (like the one we receive from  
searchFactory.getAnalyzer<Class<?>)) is not wildly spread in Lucene  
and potentially cumbersome wo the declarative approach of HSearch.

The second problem is that some potential improvements will require  
inner knowledge of HSearch:
  - object parameters (and not string params) do require to know the  
FieldBridge of the property. This is a pure HSearch notion.
  - "property literal" like JPA is introducing could be added to  
replace the String-based field approach in some situations. Though I  
don't think that it would be a perfect fit.
  - spell checker (the old idea we had)

That been said, if the API ends up being pure Lucene and once we  
stabilize it, we can contribute it back even though I am not  
necessarily a huge fan of ASL.





More information about the hibernate-dev mailing list