[hibernate-dev] Feature Proposal for Hibernate Search

Hardy Ferentschik hardy at hibernate.org
Tue Feb 4 05:56:02 EST 2014


On 4 Jan 2014, at 10:24, Martin Braun <martinbraun123 at aol.com> wrote:

> Uhm. I totally forgot to add this functionality in my rewrite (I have rewritten most of the code last weekend)
> and I implemented a way to pass parameters into QueryTypes. You can even pass parameters that are dynamically
> determined by stating the property to get its value from. With that you can easily do RangeQueryTypes.
> If you want me to elaborate on that, I can provide you with an example.

That would be cool.

> In the annotation Version it would look something like this (example from above):
> 
> @Queries(@Query(must = {
> 	@Must(subQuery = "queryAOrQueryD"),
> 	@Must(subQuery = "queryBOrQueryC"),
> 	@Must(subQuery = "queryE")}))
> @SubQueries({
> 	@SubQuery(id = "queryAOrQueryD", 
> 		query = @Query(should = {@Should(subQuery = "queryA"), @Should(subQuery = "queryD")})
> 	@SubQuery(id = "queryBOrQueryC",
> 		query = @Query(should = {@Should(subQuery = "queryB"), @Should(subQuery = "queryC")})
> 	...
> 	//define query[A-E] here.
> })

I have to say that his boggles my mind. You have to do a lot of mind work and jumping forward and backward to put things
together. I guess we can agree that this is not a silver bullet which makes writing queries objectively easier to write. 


> Maybe it's because I don't like to work with the Junctions and put them together myself,

Well, you still have to put things together, just in annotation in this case.

Looping back to Emmanuel’s initial idea, maybe a combination of DSL and parameter holder would be a better way to go.
I could imagine that would could drop the various ‘matching’ clauses and instead in the end just pass the parameter bean to
createQuery. Basically, instead of:

Query query = monthQb
		.keyword()
			.fuzzy()
				.withThreshold( .8f )
				.withPrefixLength( 1 )
			.onField( "mythology" )
			.matching( "calder” )
                  ...
			.createQuery();

one would write something like:

Query query = monthQb
		.keyword()
			.fuzzy()
				.withThreshold( .8f )
				.withPrefixLength( 1 )
			.onField( "mythology" )
                   …
			.createQuery(paramterWrapper);

—Hardy






More information about the hibernate-dev mailing list