[hibernate-dev] [infinispan-dev] [HSearch] DSL for Lucene queries (was: Re: Query module new API and configurations)
Manik Surtani
manik at jboss.org
Thu Aug 27 09:03:09 EDT 2009
On 27 Aug 2009, at 13:06, Emmanuel Bernard wrote:
>
> 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.
I thought this stuff you mentioned made sense:
> queryBuilder.withAnalyzer(Analyzer)
> queryBuilder.withEntityAnalyzer(Class<?>)
> queryBuilder.basedOnEntityAnalyzer(Class<?>)
> .overridesForField(String field, Analyzer)
> .overridesForField(String field, Analyzer)
> .build() //sucky name
Perhaps rename the static factory methods to something like:
QueryBuilder.getQueryBuilder(Analyzer)
QueryBuilder.getQueryBuilder(Class<?>)
and QueryBuilder instances have overrideAnalyzerForField(String,
Analyzer). Why do you need the build() method at the end?
>
>>
>> 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.
Not it doesn't have to be either ASL or even hosted at Apache. I
guess what I am suggesting is perhaps even a separate project -
LuceneQueryBuilder or something - which plain-old-Lucene users could
use as well. Doesn't matter where it's hosted or what the license is
- as long as its ASL or LGPL :)
--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-dev/attachments/20090827/2b7bd209/attachment.html
More information about the hibernate-dev
mailing list