Skip to content

Commit

Permalink
HSEARCH-2100 Cache the DocumentBuilder in the QueryBuildingContext
Browse files Browse the repository at this point in the history
  • Loading branch information
gsmet committed Apr 13, 2016
1 parent 44277d5 commit 138b99d
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 18 deletions.
Expand Up @@ -67,7 +67,7 @@ public enum INPUT_TYPE {
public Query createQuery() {
Query query;
final ExtendedSearchIntegrator searchIntegrator = queryContext.getFactory();
final DocumentBuilderIndexedEntity documentBuilder = Helper.getDocumentBuilder( queryContext );
final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder();
IndexReader indexReader = searchIntegrator.getIndexReaderAccessor().open( queryContext.getEntityType() );
// retrieving the docId and building the more like this query form the term vectors must be using the same index reader
try {
Expand Down
Expand Up @@ -79,7 +79,7 @@ private Query createQuery(FieldContext fieldContext, ConversionContext conversio
final Query perFieldQuery;
final String fieldName = fieldContext.getField();

final DocumentBuilderIndexedEntity documentBuilder = Helper.getDocumentBuilder( queryContext );
final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder();
DocumentFieldMetadata fieldMetadata = documentBuilder.getTypeMetadata().getDocumentFieldMetadataFor( fieldName );
if ( fieldMetadata != null ) {
if ( fieldMetadata.isNumeric() ) {
Expand Down Expand Up @@ -114,7 +114,7 @@ else if ( to != null ) {

private static Query createKeywordRangeQuery(String fieldName, RangeQueryContext rangeContext, QueryBuildingContext queryContext, ConversionContext conversionContext, FieldContext fieldContext) {
final Analyzer queryAnalyzer = queryContext.getQueryAnalyzer();
final DocumentBuilderIndexedEntity documentBuilder = Helper.getDocumentBuilder( queryContext );
final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder();
final String fromString = rangeContext.hasFrom() ?
fieldContext.objectToString( documentBuilder, rangeContext.getFrom(), conversionContext ) :
null;
Expand Down
Expand Up @@ -77,7 +77,7 @@ public Query createQuery() {

private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) {
final Query perFieldQuery;
final DocumentBuilderIndexedEntity documentBuilder = Helper.getDocumentBuilder( queryContext );
final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder();
final boolean applyTokenization;

FieldBridge fieldBridge = fieldContext.getFieldBridge() != null ? fieldContext.getFieldBridge() : documentBuilder.getBridge( fieldContext.getField() );
Expand Down
Expand Up @@ -39,7 +39,7 @@ public Query createQuery() {
}

private Query createSpatialQuery() {
final DocumentBuilderIndexedEntity documentBuilder = Helper.getDocumentBuilder( queryContext );
final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder();
//FIXME that will have to change probably but today, if someone uses latitude / longitude
// we use boolean style spatial queries
// and on coordinates field, use spatial hash query
Expand Down
Expand Up @@ -25,7 +25,7 @@ public class FieldContext {
public FieldContext(String field, QueryBuildingContext queryContext) {
this.field = field;
this.fieldCustomizer = new QueryCustomizer();
isIdField = Helper.getDocumentBuilder( queryContext ).getIdKeywordName().equals( field );
isIdField = queryContext.getDocumentBuilder().getIdKeywordName().equals( field );
}

public String getField() {
Expand Down
Expand Up @@ -16,9 +16,6 @@
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.hibernate.search.engine.integration.impl.ExtendedSearchIntegrator;
import org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity;
import org.hibernate.search.engine.spi.EntityIndexBinding;
import org.hibernate.search.exception.AssertionFailure;
import org.hibernate.search.exception.SearchException;

Expand Down Expand Up @@ -89,13 +86,4 @@ static List<String> getAllTermsFromText(String fieldName, String localText, Anal
return terms;
}

static DocumentBuilderIndexedEntity getDocumentBuilder(QueryBuildingContext queryContext) {
final ExtendedSearchIntegrator factory = queryContext.getFactory();
final Class<?> type = queryContext.getEntityType();
EntityIndexBinding indexBinding = factory.getIndexBinding( type );
if ( indexBinding == null ) {
throw new AssertionFailure( "Class is not indexed: " + type );
}
return indexBinding.getDocumentBuilder();
}
}
Expand Up @@ -9,6 +9,9 @@

import org.apache.lucene.analysis.Analyzer;
import org.hibernate.search.engine.integration.impl.ExtendedSearchIntegrator;
import org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity;
import org.hibernate.search.engine.spi.EntityIndexBinding;
import org.hibernate.search.exception.AssertionFailure;

/**
* Keep the query builder contextual information
Expand All @@ -17,19 +20,30 @@
*/
public class QueryBuildingContext {
private final ExtendedSearchIntegrator factory;
private final DocumentBuilderIndexedEntity documentBuilder;
private final Analyzer queryAnalyzer;
private final Class<?> entityType;

public QueryBuildingContext(ExtendedSearchIntegrator factory, Analyzer queryAnalyzer, Class<?> entityType) {
this.factory = factory;
this.queryAnalyzer = queryAnalyzer;
this.entityType = entityType;

EntityIndexBinding indexBinding = factory.getIndexBinding( entityType );
if ( indexBinding == null ) {
throw new AssertionFailure( "Class is not indexed: " + entityType );
}
documentBuilder = indexBinding.getDocumentBuilder();
}

public ExtendedSearchIntegrator getFactory() {
return factory;
}

public DocumentBuilderIndexedEntity getDocumentBuilder() {
return documentBuilder;
}

public Analyzer getQueryAnalyzer() {
return queryAnalyzer;
}
Expand Down

0 comments on commit 138b99d

Please sign in to comment.