public FieldContext(String field, QueryBuildingContext queryContext) { this.field = field; this.fieldCustomizer = new QueryCustomizer(); isIdField = queryContext.getDocumentBuilder().getIdFieldName().equals( field ); }
public FieldContext(String field, QueryBuildingContext queryContext) { this.field = field; this.fieldCustomizer = new QueryCustomizer(); isIdField = queryContext.getDocumentBuilder().getIdFieldName().equals( field ); }
private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) { final Query perFieldQuery; final String fieldName = fieldContext.getField(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); if ( Helper.requiresNumericQuery( documentBuilder, fieldContext, rangeContext.getFrom(), rangeContext.getTo() ) ) { perFieldQuery = createNumericRangeQuery( fieldName, rangeContext ); } else { perFieldQuery = createKeywordRangeQuery( fieldName, rangeContext, queryContext, conversionContext, fieldContext ); } return fieldContext.getFieldCustomizer().setWrappedQuery( perFieldQuery ).createQuery(); }
private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) { final Query perFieldQuery; final String fieldName = fieldContext.getField(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); if ( Helper.requiresNumericQuery( documentBuilder, fieldContext, rangeContext.getFrom(), rangeContext.getTo() ) ) { perFieldQuery = createNumericRangeQuery( fieldName, rangeContext ); } else { perFieldQuery = createKeywordRangeQuery( fieldName, rangeContext, queryContext, conversionContext, fieldContext ); } return fieldContext.getFieldCustomizer().setWrappedQuery( perFieldQuery ).createQuery(); }
private Query createSpatialQuery() { 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 // FIXME in the future we will likely react to some state stored in SpatialFieldBridge (for the indexing strategy) String coordinatesField = spatialContext.getCoordinatesField(); FieldBridge fieldBridge = documentBuilder.getBridge( coordinatesField ); if ( fieldBridge instanceof SpatialFieldBridgeByHash ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByHash( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), // always in KM so far, no need to convert coordinatesField ); } else if ( fieldBridge instanceof SpatialFieldBridgeByRange ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByRange( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), //always in KM so far, no need to convert coordinatesField ); } else { throw LOG.targetedFieldNotSpatial( queryContext.getEntityType().getName(), coordinatesField ); } } }
private Query createSpatialQuery() { 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 // FIXME in the future we will likely react to some state stored in SpatialFieldBridge (for the indexing strategy) String coordinatesField = spatialContext.getCoordinatesField(); FieldBridge fieldBridge = documentBuilder.getBridge( coordinatesField ); if ( fieldBridge instanceof SpatialFieldBridgeByHash ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByHash( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), // always in KM so far, no need to convert coordinatesField ); } else if ( fieldBridge instanceof SpatialFieldBridgeByRange ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByRange( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), //always in KM so far, no need to convert coordinatesField ); } else { throw LOG.targetedFieldNotSpatial( queryContext.getEntityType().getName(), coordinatesField ); } } }
private static Query createKeywordRangeQuery(String fieldName, RangeQueryContext rangeContext, QueryBuildingContext queryContext, ConversionContext conversionContext, FieldContext fieldContext) { final AnalyzerReference analyzerReference = queryContext.getQueryAnalyzerReference(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); final String fromString = rangeContext.hasFrom() ? fieldContext.objectToString( documentBuilder, rangeContext.getFrom(), conversionContext ) : null; final String toString = rangeContext.hasTo() ? fieldContext.objectToString( documentBuilder, rangeContext.getTo(), conversionContext ) : null; String lowerTerm; String upperTerm; if ( analyzerReference.is( LuceneAnalyzerReference.class ) ) { final Analyzer queryAnalyzer = analyzerReference.unwrap( LuceneAnalyzerReference.class ).getAnalyzer(); lowerTerm = fromString == null ? null : Helper.getAnalyzedTerm( fieldName, fromString, "from", queryAnalyzer, fieldContext ); upperTerm = toString == null ? null : Helper.getAnalyzedTerm( fieldName, toString, "to", queryAnalyzer, fieldContext ); } else { lowerTerm = fromString == null ? null : fromString; upperTerm = toString == null ? null : toString; } return TermRangeQuery.newStringRange( fieldName, lowerTerm, upperTerm, !rangeContext.isExcludeFrom(), !rangeContext.isExcludeTo() ); }
private static Query createKeywordRangeQuery(String fieldName, RangeQueryContext rangeContext, QueryBuildingContext queryContext, ConversionContext conversionContext, FieldContext fieldContext) { final AnalyzerReference analyzerReference = queryContext.getQueryAnalyzerReference(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); final String fromString = rangeContext.hasFrom() ? fieldContext.objectToString( documentBuilder, rangeContext.getFrom(), conversionContext ) : null; final String toString = rangeContext.hasTo() ? fieldContext.objectToString( documentBuilder, rangeContext.getTo(), conversionContext ) : null; String lowerTerm; String upperTerm; if ( analyzerReference.is( LuceneAnalyzerReference.class ) ) { final Analyzer queryAnalyzer = analyzerReference.unwrap( LuceneAnalyzerReference.class ).getAnalyzer(); lowerTerm = fromString == null ? null : Helper.getAnalyzedTerm( fieldName, fromString, "from", queryAnalyzer, fieldContext ); upperTerm = toString == null ? null : Helper.getAnalyzedTerm( fieldName, toString, "to", queryAnalyzer, fieldContext ); } else { lowerTerm = fromString == null ? null : fromString; upperTerm = toString == null ? null : toString; } return TermRangeQuery.newStringRange( fieldName, lowerTerm, upperTerm, !rangeContext.isExcludeFrom(), !rangeContext.isExcludeTo() ); }
private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) { final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); final boolean applyTokenization;
public Query createQuery() { Query query; final ExtendedSearchIntegrator searchIntegrator = queryContext.getExtendedSearchIntegrator(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); IndexReader indexReader = searchIntegrator.getIndexReaderAccessor().open( queryContext.getEntityType().asTypeSet() ); // retrieving the docId and building the more like this query form the term vectors must be using the same index reader try { String[] fieldNames = getAllCompatibleFieldNames( documentBuilder ); if ( fieldsContext.size() == 0 ) { // Use all compatible fields when comparingAllFields is used fieldsContext.addAll( fieldNames ); } query = new MoreLikeThisBuilder( documentBuilder, searchIntegrator ) .compatibleFieldNames( fieldNames ) .fieldsContext( fieldsContext ) .queryContext( queryContext ) .indexReader( indexReader ) .inputType( inputType ) .input( input ) .otherMoreLikeThisContext( moreLikeThisContext ) .createQuery(); } finally { searchIntegrator.getIndexReaderAccessor().close( indexReader ); } //TODO implement INPUT_TYPE.READER //TODO implement INPUT_TYPE.STRING return queryCustomizer.setWrappedQuery( query ).createQuery(); }
public Query createQuery() { Query query; final ExtendedSearchIntegrator searchIntegrator = queryContext.getExtendedSearchIntegrator(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); IndexReader indexReader = searchIntegrator.getIndexReaderAccessor().open( queryContext.getEntityType().asTypeSet() ); // retrieving the docId and building the more like this query form the term vectors must be using the same index reader try { String[] fieldNames = getAllCompatibleFieldNames( documentBuilder ); if ( fieldsContext.size() == 0 ) { // Use all compatible fields when comparingAllFields is used fieldsContext.addAll( fieldNames ); } query = new MoreLikeThisBuilder( documentBuilder, searchIntegrator ) .compatibleFieldNames( fieldNames ) .fieldsContext( fieldsContext ) .queryContext( queryContext ) .indexReader( indexReader ) .inputType( inputType ) .input( input ) .otherMoreLikeThisContext( moreLikeThisContext ) .createQuery(); } finally { searchIntegrator.getIndexReaderAccessor().close( indexReader ); } //TODO implement INPUT_TYPE.READER //TODO implement INPUT_TYPE.STRING return queryCustomizer.setWrappedQuery( query ).createQuery(); }
private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) { final Query perFieldQuery; final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); final boolean applyTokenization;