Author: epbernard
Date: 2010-06-02 11:53:55 -0400 (Wed, 02 Jun 2010)
New Revision: 19670
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java
Log:
HSEARCH-533 pass the query builder context around
We need the targeted entity to prepare type conversion
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -1,10 +1,7 @@
package org.hibernate.search.query.dsl.v2.impl;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.Filter;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.FuzzyContext;
import org.hibernate.search.query.dsl.v2.TermMatchingContext;
@@ -12,29 +9,27 @@
* @author Emmanuel Bernard
*/
class ConnectedFuzzyContext implements FuzzyContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final TermQueryContext context;
+ private final TermQueryContext termContext;
- public ConnectedFuzzyContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory,
QueryCustomizer queryCustomizer) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
+ public ConnectedFuzzyContext(QueryCustomizer queryCustomizer, QueryBuildingContext
queryContext) {
this.queryCustomizer = queryCustomizer;
- this.context = new TermQueryContext( TermQueryContext.Approximation.FUZZY);
+ this.termContext = new TermQueryContext( TermQueryContext.Approximation.FUZZY);
+ this.queryContext = queryContext;
}
public TermMatchingContext onField(String field) {
- return new ConnectedTermMatchingContext(context, field, queryCustomizer, queryAnalyzer,
factory);
+ return new ConnectedTermMatchingContext(termContext, field, queryCustomizer,
queryContext);
}
public ConnectedFuzzyContext threshold(float threshold) {
- context.setThreshold( threshold );
+ termContext.setThreshold( threshold );
return this;
}
public ConnectedFuzzyContext prefixLength(int prefixLength) {
- context.setPrefixLength( prefixLength );
+ termContext.setPrefixLength( prefixLength );
return this;
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -8,7 +8,6 @@
import java.util.List;
import java.util.Map;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
@@ -19,25 +18,24 @@
import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.TermRangeQuery;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.search.SearchException;
import org.hibernate.search.query.dsl.v2.PhraseTermination;
-import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
/**
* @author Emmanuel Bernard
*/
public class ConnectedMultiFieldsPhraseQueryBuilder implements PhraseTermination {
- private final PhraseQueryContext queryContext;
- private final Analyzer queryAnalyzer;
+ private final PhraseQueryContext phraseContext;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
private final List<FieldContext> fieldContexts;
- public ConnectedMultiFieldsPhraseQueryBuilder(PhraseQueryContext queryContext, Analyzer
queryAnalyzer, QueryCustomizer queryCustomizer, List<FieldContext> fieldContexts) {
+ public ConnectedMultiFieldsPhraseQueryBuilder(PhraseQueryContext phraseContext,
QueryCustomizer queryCustomizer,
+ List<FieldContext> fieldContexts, QueryBuildingContext queryContext)
{
+ this.phraseContext = phraseContext;
this.queryContext = queryContext;
- this.queryAnalyzer = queryAnalyzer;
this.queryCustomizer = queryCustomizer;
this.fieldContexts = fieldContexts;
}
@@ -66,10 +64,10 @@
TokenStream stream = null;
boolean isMultiPhrase = false;
Map<Integer, List<Term>> termsPerPosition = new HashMap<Integer,
List<Term>>();
- final String sentence = queryContext.getSentence();
+ final String sentence = phraseContext.getSentence();
try {
Reader reader = new StringReader( sentence );
- stream = queryAnalyzer.reusableTokenStream( fieldName, reader);
+ stream = queryContext.getQueryAnalyzer().reusableTokenStream( fieldName, reader);
TermAttribute termAttribute = (TermAttribute) stream.addAttribute( TermAttribute.class
);
PositionIncrementAttribute positionAttribute = (PositionIncrementAttribute)
stream.addAttribute( PositionIncrementAttribute.class );
@@ -139,7 +137,7 @@
else {
if (isMultiPhrase) {
MultiPhraseQuery query = new MultiPhraseQuery();
- query.setSlop( queryContext.getSlop() );
+ query.setSlop( phraseContext.getSlop() );
for ( Map.Entry<Integer,List<Term>> entry : termsPerPosition.entrySet() )
{
final List<Term> value = entry.getValue();
query.add( value.toArray( new Term[value.size()] ), entry.getKey() );
@@ -148,7 +146,7 @@
}
else {
PhraseQuery query = new PhraseQuery();
- query.setSlop( queryContext.getSlop() );
+ query.setSlop( phraseContext.getSlop() );
for ( Map.Entry<Integer,List<Term>> entry : termsPerPosition.entrySet() )
{
final List<Term> value = entry.getValue();
query.add( value.get(0), entry.getKey() );
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -1,53 +1,43 @@
package org.hibernate.search.query.dsl.v2.impl;
-import java.io.IOException;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TermRangeQuery;
-import org.apache.lucene.search.WildcardQuery;
import org.hibernate.annotations.common.AssertionFailure;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
/**
* @author Emmanuel Bernard
*/
public class ConnectedMultiFieldsRangeQueryBuilder implements RangeTerminationExcludable
{
- private final RangeQueryContext queryContext;
- private final Analyzer queryAnalyzer;
+ private final RangeQueryContext rangeContext;
private final QueryCustomizer queryCustomizer;
private final List<FieldContext> fieldContexts;
- private final SearchFactoryImplementor factory;
+ private final QueryBuildingContext queryContext;
- public ConnectedMultiFieldsRangeQueryBuilder(RangeQueryContext queryContext, Analyzer
queryAnalyzer,
+ public ConnectedMultiFieldsRangeQueryBuilder(RangeQueryContext rangeContext,
QueryCustomizer queryCustomizer, List<FieldContext> fieldContexts,
- SearchFactoryImplementor factory) {
- this.queryContext = queryContext;
- this.queryAnalyzer = queryAnalyzer;
+ QueryBuildingContext queryContext) {
+ this.rangeContext = rangeContext;
this.queryCustomizer = queryCustomizer;
this.fieldContexts = fieldContexts;
- this.factory = factory;
+ this.queryContext = queryContext;
}
public RangeTerminationExcludable exclude() {
- if ( queryContext.getFrom() != null && queryContext.getTo() != null ) {
- queryContext.setExcludeTo( true );
+ if ( rangeContext.getFrom() != null && rangeContext.getTo() != null ) {
+ rangeContext.setExcludeTo( true );
}
- else if ( queryContext.getFrom() != null ) {
- queryContext.setExcludeTo( true );
+ else if ( rangeContext.getFrom() != null ) {
+ rangeContext.setExcludeTo( true );
}
- else if ( queryContext.getTo() != null ) {
- queryContext.setExcludeTo( true );
+ else if ( rangeContext.getTo() != null ) {
+ rangeContext.setExcludeTo( true );
}
else {
throw new AssertionFailure( "Both from and to clause of a range query are
null" );
@@ -72,16 +62,17 @@
public Query createQuery(FieldContext fieldContext) {
final Query perFieldQuery;
final String fieldName = fieldContext.getField();
- final Object from = queryContext.getFrom();
+ final Analyzer queryAnalyzer = queryContext.getQueryAnalyzer();
+ final Object from = rangeContext.getFrom();
final String lowerTerm = from == null ? null : Helper.getAnalyzedTerm( fieldName, from,
"from", queryAnalyzer );
- final Object to = queryContext.getTo();
+ final Object to = rangeContext.getTo();
final String upperTerm = to == null ? null : Helper.getAnalyzedTerm( fieldName, to,
"to", queryAnalyzer );
perFieldQuery = new TermRangeQuery(
fieldName,
lowerTerm,
upperTerm,
- queryContext.isExcludeFrom(),
- queryContext.isExcludeTo()
+ rangeContext.isExcludeFrom(),
+ rangeContext.isExcludeTo()
);
return fieldContext.getFieldCustomizer().setWrappedQuery( perFieldQuery
).createQuery();
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -15,8 +15,6 @@
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.TermTermination;
/**
@@ -24,20 +22,19 @@
*/
public class ConnectedMultiFieldsTermQueryBuilder implements TermTermination {
private final String text;
- private final Analyzer queryAnalyzer;
private final QueryCustomizer queryCustomizer;
- private final TermQueryContext queryContext;
+ private final TermQueryContext termContext;
private final List<FieldContext> fieldContexts;
+ private final QueryBuildingContext queryContext;
- public ConnectedMultiFieldsTermQueryBuilder(TermQueryContext queryContext,
+ public ConnectedMultiFieldsTermQueryBuilder(TermQueryContext termContext,
String text,
List<FieldContext> fieldContexts,
QueryCustomizer queryCustomizer,
- Analyzer queryAnalyzer,
- SearchFactoryImplementor factory) {
- this.queryContext = queryContext;
+ QueryBuildingContext queryContext) {
+ this.termContext = termContext;
this.text = text;
- this.queryAnalyzer = queryAnalyzer;
+ this.queryContext = queryContext;
this.queryCustomizer = queryCustomizer;
this.fieldContexts = fieldContexts;
}
@@ -64,7 +61,7 @@
else {
List<String> terms;
try {
- terms = getAllTermsFromText( fieldContext.getField(), text, queryAnalyzer );
+ terms = getAllTermsFromText( fieldContext.getField(), text,
queryContext.getQueryAnalyzer() );
}
catch ( IOException e ) {
throw new AssertionFailure("IO exception while reading String stream??",
e);
@@ -90,7 +87,7 @@
private Query createTermQuery(FieldContext fieldContext, String term) {
Query query;
final String fieldName = fieldContext.getField();
- switch ( queryContext.getApproximation() ) {
+ switch ( termContext.getApproximation() ) {
case EXACT:
query = new TermQuery( new Term( fieldName, term ) );
break;
@@ -100,11 +97,11 @@
case FUZZY:
query = new FuzzyQuery(
new Term( fieldName, term ),
- queryContext.getThreshold(),
- queryContext.getPrefixLength() );
+ termContext.getThreshold(),
+ termContext.getPrefixLength() );
break;
default:
- throw new AssertionFailure( "Unknown approximation: " +
queryContext.getApproximation() );
+ throw new AssertionFailure( "Unknown approximation: " +
termContext.getApproximation() );
}
return query;
}
@@ -112,7 +109,7 @@
private List<String> getAllTermsFromText(String fieldName, String localText,
Analyzer analyzer) throws IOException {
//it's better not to apply the analyzer with wildcard as * and ? can be mistakenly
removed
List<String> terms = new ArrayList<String>();
- if ( queryContext.getApproximation() == TermQueryContext.Approximation.WILDCARD ) {
+ if ( termContext.getApproximation() == TermQueryContext.Approximation.WILDCARD ) {
terms.add( localText );
}
else {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -3,37 +3,32 @@
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.Filter;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.PhraseContext;
import org.hibernate.search.query.dsl.v2.PhraseMatchingContext;
-import org.hibernate.search.query.dsl.v2.RangeContext;
-import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
/**
* @author Emmanuel Bernard
*/
class ConnectedPhraseContext implements PhraseContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final PhraseQueryContext queryContext;
+ private final PhraseQueryContext phraseContext;
- public ConnectedPhraseContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory)
{
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
+ public ConnectedPhraseContext(QueryBuildingContext queryContext) {
this.queryCustomizer = new QueryCustomizer();
- this.queryContext = new PhraseQueryContext();
+ this.phraseContext = new PhraseQueryContext();
+ this.queryContext = queryContext;
}
public PhraseContext slop(int slop) {
- queryContext.setSlop( slop );
+ phraseContext.setSlop( slop );
return this;
}
public PhraseMatchingContext onField(String fieldName) {
- return new ConnectedPhraseMatchingContext(fieldName, queryContext, queryCustomizer,
queryAnalyzer, factory);
+ return new ConnectedPhraseMatchingContext(fieldName, phraseContext, queryCustomizer,
queryContext);
}
public PhraseContext boostedTo(float boost) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -3,37 +3,28 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.lucene.analysis.Analyzer;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.PhraseMatchingContext;
import org.hibernate.search.query.dsl.v2.PhraseTermination;
-import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
-import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
/**
* @author Emmanuel Bernard
*/
public class ConnectedPhraseMatchingContext implements PhraseMatchingContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final PhraseQueryContext queryContext;
+ private final PhraseQueryContext phraseContext;
private final List<FieldContext> fieldContexts;
//when a varargs of fields are passed, apply the same customization for all.
//keep the index of the first context in this queue
private int firstOfContext = 0;
public ConnectedPhraseMatchingContext(String fieldName,
- PhraseQueryContext queryContext,
+ PhraseQueryContext phraseContext,
QueryCustomizer queryCustomizer,
- Analyzer queryAnalyzer,
- SearchFactoryImplementor factory) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
- this.queryCustomizer = queryCustomizer;
+ QueryBuildingContext queryContext) {
this.queryContext = queryContext;
+ this.queryCustomizer = queryCustomizer;
+ this.phraseContext = phraseContext;
this.fieldContexts = new ArrayList<FieldContext>(4);
this.fieldContexts.add( new FieldContext( fieldName ) );
}
@@ -45,8 +36,8 @@
}
public PhraseTermination sentence(String sentence) {
- queryContext.setSentence(sentence);
- return new ConnectedMultiFieldsPhraseQueryBuilder(queryContext, queryAnalyzer,
queryCustomizer, fieldContexts);
+ phraseContext.setSentence(sentence);
+ return new ConnectedMultiFieldsPhraseQueryBuilder( phraseContext, queryCustomizer,
fieldContexts, queryContext );
}
public PhraseMatchingContext boostedTo(float boost) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -19,24 +19,22 @@
* @author Emmanuel Bernard
*/
public class ConnectedQueryBuilder implements QueryBuilder {
- private final Analyzer queryAnalyzer;
- private final SearchFactoryImplementor factory;
+ private final QueryBuildingContext context;
- public ConnectedQueryBuilder(Analyzer queryAnalyzer, SearchFactoryImplementor factory)
{
- this.queryAnalyzer = queryAnalyzer;
- this.factory = factory;
+ public ConnectedQueryBuilder(QueryBuildingContext context) {
+ this.context = context;
}
public TermContext keyword() {
- return new ConnectedTermContext(queryAnalyzer, factory);
+ return new ConnectedTermContext(context);
}
public RangeContext range() {
- return new ConnectedRangeContext( queryAnalyzer, factory );
+ return new ConnectedRangeContext(context);
}
public PhraseContext phrase() {
- return new ConnectedPhraseContext( queryAnalyzer, factory );
+ return new ConnectedPhraseContext(context);
}
//fixme Have to use raw types but would be nice to not have to
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -25,12 +25,12 @@
public final class HSearchEntityContext implements EntityContext {
private final ScopedAnalyzer queryAnalyzer;
- private final SearchFactoryImplementor factory;
+ private final QueryBuildingContext context;
public HSearchEntityContext(Class<?> entityType, SearchFactoryImplementor
factory) {
- this.factory = factory;
queryAnalyzer = new ScopedAnalyzer();
queryAnalyzer.setGlobalAnalyzer( factory.getAnalyzer( entityType ) );
+ context = new QueryBuildingContext( factory, queryAnalyzer, entityType);
}
public EntityContext overridesForField(String field, String analyzerName) {
@@ -39,7 +39,7 @@
}
public QueryBuilder get() {
- return new ConnectedQueryBuilder(queryAnalyzer, factory);
+ return new ConnectedQueryBuilder(context);
}
}
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -12,18 +12,16 @@
* @author Emmanuel Bernard
*/
class ConnectedRangeContext implements RangeContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- public ConnectedRangeContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory)
{
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
+ public ConnectedRangeContext(QueryBuildingContext queryContext) {
+ this.queryContext = queryContext;
this.queryCustomizer = new QueryCustomizer();
}
public RangeMatchingContext onField(String fieldName) {
- return new ConnectedRangeMatchingContext(fieldName, queryCustomizer, queryAnalyzer,
factory);
+ return new ConnectedRangeMatchingContext(fieldName, queryCustomizer, queryContext);
}
public RangeContext boostedTo(float boost) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -3,10 +3,6 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.lucene.analysis.Analyzer;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
@@ -14,10 +10,9 @@
* @author Emmanuel Bernard
*/
public class ConnectedRangeMatchingContext implements RangeMatchingContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final RangeQueryContext queryContext;
+ private final RangeQueryContext rangeContext;
private final List<FieldContext> fieldContexts;
//when a varargs of fields are passed, apply the same customization for all.
//keep the index of the first context in this queue
@@ -25,12 +20,10 @@
public ConnectedRangeMatchingContext(String fieldName,
QueryCustomizer queryCustomizer,
- Analyzer queryAnalyzer,
- SearchFactoryImplementor factory) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
+ QueryBuildingContext queryContext) {
+ this.queryContext = queryContext;
this.queryCustomizer = queryCustomizer;
- this.queryContext = new RangeQueryContext();
+ this.rangeContext = new RangeQueryContext();
this.fieldContexts = new ArrayList<FieldContext>(4);
this.fieldContexts.add( new FieldContext( fieldName ) );
}
@@ -42,7 +35,7 @@
}
public <T> FromRangeContext<T> from(T from) {
- queryContext.setFrom( from );
+ rangeContext.setFrom( from );
return new ConnectedFromRangeContext<T>(this);
}
@@ -54,29 +47,28 @@
}
public RangeTerminationExcludable to(T to) {
- mother.queryContext.setTo(to);
+ mother.rangeContext.setTo(to);
return new ConnectedMultiFieldsRangeQueryBuilder(
- mother.queryContext,
- mother.queryAnalyzer,
+ mother.rangeContext,
mother.queryCustomizer,
mother.fieldContexts,
- mother.factory);
+ mother.queryContext);
}
public FromRangeContext<T> exclude() {
- mother.queryContext.setExcludeFrom( true );
+ mother.rangeContext.setExcludeFrom( true );
return this;
}
}
public RangeTerminationExcludable below(Object below) {
- queryContext.setTo( below );
- return new ConnectedMultiFieldsRangeQueryBuilder(queryContext, queryAnalyzer,
queryCustomizer, fieldContexts, factory);
+ rangeContext.setTo( below );
+ return new ConnectedMultiFieldsRangeQueryBuilder( rangeContext, queryCustomizer,
fieldContexts, queryContext);
}
public RangeTerminationExcludable above(Object above) {
- queryContext.setFrom( above );
- return new ConnectedMultiFieldsRangeQueryBuilder(queryContext, queryAnalyzer,
queryCustomizer, fieldContexts, factory);
+ rangeContext.setFrom( above );
+ return new ConnectedMultiFieldsRangeQueryBuilder( rangeContext, queryCustomizer,
fieldContexts, queryContext);
}
public RangeMatchingContext boostedTo(float boost) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -1,10 +1,7 @@
package org.hibernate.search.query.dsl.v2.impl;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.Filter;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.FuzzyContext;
import org.hibernate.search.query.dsl.v2.TermContext;
import org.hibernate.search.query.dsl.v2.TermMatchingContext;
@@ -14,32 +11,30 @@
* @author Emmanuel Bernard
*/
class ConnectedTermContext implements TermContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final TermQueryContext context;
+ private final TermQueryContext termContext;
- public ConnectedTermContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
+ public ConnectedTermContext(QueryBuildingContext queryContext) {
+ this.queryContext = queryContext;
this.queryCustomizer = new QueryCustomizer();
- this.context = new TermQueryContext( TermQueryContext.Approximation.EXACT);
+ this.termContext = new TermQueryContext( TermQueryContext.Approximation.EXACT);
}
public TermMatchingContext onField(String field) {
- return new ConnectedTermMatchingContext(context, field, queryCustomizer, queryAnalyzer,
factory);
+ return new ConnectedTermMatchingContext( termContext, field, queryCustomizer,
queryContext);
}
public TermMatchingContext onFields(String... fields) {
- return new ConnectedTermMatchingContext(context, fields, queryCustomizer,
queryAnalyzer, factory);
+ return new ConnectedTermMatchingContext( termContext, fields, queryCustomizer,
queryContext);
}
public FuzzyContext fuzzy() {
- return new ConnectedFuzzyContext( queryAnalyzer, factory, queryCustomizer );
+ return new ConnectedFuzzyContext( queryCustomizer, queryContext );
}
public WildcardContext wildcard() {
- return new ConnectedWildcardContext( queryAnalyzer, factory, queryCustomizer);
+ return new ConnectedWildcardContext(queryCustomizer, queryContext);
}
public ConnectedTermContext boostedTo(float boost) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -3,10 +3,6 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.lucene.analysis.Analyzer;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.TermMatchingContext;
import org.hibernate.search.query.dsl.v2.TermTermination;
@@ -14,31 +10,28 @@
* @author Emmanuel Bernard
*/
public class ConnectedTermMatchingContext implements TermMatchingContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final TermQueryContext queryContext;
+ private final TermQueryContext termContext;
private final List<FieldContext> fieldContexts;
//when a varargs of fields are passed, apply the same customization for all.
//keep the index of the first context in this queue
private int firstOfContext = 0;
- public ConnectedTermMatchingContext(TermQueryContext queryContext,
- String field, QueryCustomizer queryCustomizer, Analyzer queryAnalyzer,
SearchFactoryImplementor factory) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
- this.queryCustomizer = queryCustomizer;
+ public ConnectedTermMatchingContext(TermQueryContext termContext,
+ String field, QueryCustomizer queryCustomizer, QueryBuildingContext queryContext) {
this.queryContext = queryContext;
+ this.queryCustomizer = queryCustomizer;
+ this.termContext = termContext;
this.fieldContexts = new ArrayList<FieldContext>(4);
this.fieldContexts.add( new FieldContext( field ) );
}
- public ConnectedTermMatchingContext(TermQueryContext queryContext,
- String[] fields, QueryCustomizer queryCustomizer, Analyzer queryAnalyzer,
SearchFactoryImplementor factory) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
- this.queryCustomizer = queryCustomizer;
+ public ConnectedTermMatchingContext(TermQueryContext termContext,
+ String[] fields, QueryCustomizer queryCustomizer, QueryBuildingContext queryContext)
{
this.queryContext = queryContext;
+ this.queryCustomizer = queryCustomizer;
+ this.termContext = termContext;
this.fieldContexts = new ArrayList<FieldContext>(fields.length);
for (String field : fields) {
this.fieldContexts.add( new FieldContext( field ) );
@@ -46,7 +39,7 @@
}
public TermTermination matching(String text) {
- return new ConnectedMultiFieldsTermQueryBuilder( queryContext, text, fieldContexts,
queryCustomizer, queryAnalyzer, factory);
+ return new ConnectedMultiFieldsTermQueryBuilder( termContext, text, fieldContexts,
queryCustomizer, queryContext);
}
public TermMatchingContext andField(String field) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java 2010-06-02
15:52:51 UTC (rev 19669)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -1,10 +1,7 @@
package org.hibernate.search.query.dsl.v2.impl;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.Filter;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.TermMatchingContext;
import org.hibernate.search.query.dsl.v2.WildcardContext;
@@ -12,20 +9,18 @@
* @author Emmanuel Bernard
*/
class ConnectedWildcardContext implements WildcardContext {
- private final SearchFactoryImplementor factory;
- private final Analyzer queryAnalyzer;
+ private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
- private final TermQueryContext context;
+ private final TermQueryContext termContext;
- public ConnectedWildcardContext(Analyzer queryAnalyzer, SearchFactoryImplementor
factory, QueryCustomizer queryCustomizer) {
- this.factory = factory;
- this.queryAnalyzer = queryAnalyzer;
+ public ConnectedWildcardContext(QueryCustomizer queryCustomizer, QueryBuildingContext
queryContext) {
+ this.queryContext = queryContext;
this.queryCustomizer = queryCustomizer;
- this.context = new TermQueryContext( TermQueryContext.Approximation.WILDCARD);
+ this.termContext = new TermQueryContext(TermQueryContext.Approximation.WILDCARD);
}
public TermMatchingContext onField(String field) {
- return new ConnectedTermMatchingContext(context, field, queryCustomizer, queryAnalyzer,
factory);
+ return new ConnectedTermMatchingContext( termContext, field, queryCustomizer,
queryContext);
}
public WildcardContext boostedTo(float boost) {
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java 2010-06-02
15:53:55 UTC (rev 19670)
@@ -0,0 +1,34 @@
+package org.hibernate.search.query.dsl.v2.impl;
+
+import org.apache.lucene.analysis.Analyzer;
+
+import org.hibernate.search.engine.SearchFactoryImplementor;
+
+/**
+ * Keep the query builder contextual information
+ *
+ * @author Emmanuel Bernard
+ */
+public class QueryBuildingContext {
+ private final SearchFactoryImplementor factory;
+ private final Analyzer queryAnalyzer;
+ private final Class<?> entityType;
+
+ public QueryBuildingContext(SearchFactoryImplementor factory, Analyzer queryAnalyzer,
Class<?> entityType) {
+ this.factory = factory;
+ this.queryAnalyzer = queryAnalyzer;
+ this.entityType = entityType;
+ }
+
+ public SearchFactoryImplementor getFactory() {
+ return factory;
+ }
+
+ public Analyzer getQueryAnalyzer() {
+ return queryAnalyzer;
+ }
+
+ public Class<?> getEntityType() {
+ return entityType;
+ }
+}