RangeFacetImpl(String facetingName, String facetFieldName, String sourceFieldName, FacetRange<T> range, int count, int index) { super( facetingName, facetFieldName, sourceFieldName, range.getRangeString(), count ); this.range = range; this.rangeIndex = index; }
@Override public boolean isIncludeMax() { return range.isMaxIncluded(); }
@Override public Query getFacetQuery() { Object minOrMax = getNonNullMinOrMax( range ); if ( NumericFieldUtils.requiresNumericRangeQuery( minOrMax ) ) { return NumericFieldUtils.createNumericRangeQuery( getSourceFieldName(), range.getMin(), range.getMax(), range.isMinIncluded(), range.isMaxIncluded() ); } else if ( minOrMax instanceof String ) { return TermRangeQuery.newStringRange( getSourceFieldName(), (String) range.getMin(), (String) range.getMax(), range.isMinIncluded(), range.isMaxIncluded() ); } else { throw new AssertionFailure( "Unsupported range type" ); } }
private List<Facet> updateRangeFacets(JsonObject aggregations, RangeFacetRequest<?> facetRequest) { if ( !ReflectionHelper.isIntegerType( facetRequest.getFacetValueType() ) && !Date.class.isAssignableFrom( facetRequest.getFacetValueType() ) && !ReflectionHelper.isFloatingPointType( facetRequest.getFacetValueType() ) ) { throw LOG.unsupportedFacetRangeParameter( facetRequest.getFacetValueType().getName() ); } ArrayList<Facet> facets = new ArrayList<>(); for ( FacetRange<?> facetRange : facetRequest.getFacetRangeList() ) { JsonElement aggregation = aggregations.get( facetRequest.getFacetingName() + "-" + facetRange.getIdentifier() ); if ( aggregation == null ) { continue; } int docCount = aggregation.getAsJsonObject().get( "doc_count" ).getAsInt(); if ( docCount == 0 && !facetRequest.hasZeroCountsIncluded() ) { continue; } facets.add( facetRequest.createFacet( facetRange.getRangeString(), docCount ) ); } return facets; }
@Override public boolean isIncludeMin() { return range.isMinIncluded(); }
@Override public T getMax() { return range.getMax(); }
@Override public T getMin() { return range.getMin(); }
public void makeRange() { Class<?> type = getRangeType(); assertValidRangeType( type ); FacetRange<T> facetRange = new FacetRange<T>( type, rangeStart, rangeEnd, includeRangeStart, includeRangeEnd, fieldName ); rangeList.add( facetRange ); rangeStart = null; rangeEnd = null; includeRangeStart = true; includeRangeEnd = true; }
public FacetRange(Class<?> rangeType, T min, T max, boolean includeMin, boolean includeMax, String fieldName) { if ( max == null && min == null ) { throw new IllegalArgumentException( "At least one end of the range has to be specified" ); } this.min = min; this.max = max; this.includeMax = includeMax; this.includeMin = includeMin; this.fieldName = fieldName; this.rangeString = buildRangeString(); this.rangeType = rangeType; }
@Override public Query getFacetQuery() { Object minOrMax = getNonNullMinOrMax( range ); if ( NumericFieldUtils.requiresNumericRangeQuery( minOrMax ) ) { return NumericFieldUtils.createNumericRangeQuery( getSourceFieldName(), range.getMin(), range.getMax(), range.isMinIncluded(), range.isMaxIncluded() ); } else if ( minOrMax instanceof String ) { return TermRangeQuery.newStringRange( getSourceFieldName(), (String) range.getMin(), (String) range.getMax(), range.isMinIncluded(), range.isMaxIncluded() ); } else { throw new AssertionFailure( "Unsupported range type" ); } }
private List<Facet> extractRangeFacets(JsonObject aggregations, RangeFacetRequest<?> facetRequest, FacetMetadata facetMetadata) { if ( !ReflectionHelper.isIntegerType( facetRequest.getFacetValueType() ) && !Date.class.isAssignableFrom( facetRequest.getFacetValueType() ) && !ReflectionHelper.isFloatingPointType( facetRequest.getFacetValueType() ) ) { throw LOG.unsupportedFacetRangeParameter( facetRequest.getFacetValueType().getName() ); } ArrayList<Facet> facets = new ArrayList<>(); for ( FacetRange<?> facetRange : facetRequest.getFacetRangeList() ) { JsonElement aggregation = aggregations.get( facetRequest.getFacetingName() + "-" + facetRange.getIdentifier() ); if ( aggregation == null ) { continue; } int docCount = aggregation.getAsJsonObject().get( "doc_count" ).getAsInt(); if ( docCount == 0 && !facetRequest.hasZeroCountsIncluded() ) { continue; } facets.add( facetRequest.createFacet( facetMetadata, facetRange.getRangeString(), docCount ) ); } return facets; }
@Override public boolean isIncludeMin() { return range.isMinIncluded(); }
@Override public T getMax() { return range.getMax(); }
@Override public T getMin() { return range.getMin(); }
public void makeRange() { Class<?> type = getRangeType(); assertValidRangeType( type ); FacetRange<T> facetRange = new FacetRange<T>( type, rangeStart, rangeEnd, includeRangeStart, includeRangeEnd, fieldName ); rangeList.add( facetRange ); rangeStart = null; rangeEnd = null; includeRangeStart = true; includeRangeEnd = true; }
public FacetRange(Class<?> rangeType, T min, T max, boolean includeMin, boolean includeMax, String fieldName) { if ( max == null && min == null ) { throw new IllegalArgumentException( "At least one end of the range has to be specified" ); } this.min = min; this.max = max; this.includeMax = includeMax; this.includeMin = includeMin; this.fieldName = fieldName; this.rangeString = buildRangeString(); this.rangeType = rangeType; }
private FacetResult getFacetResultForFloatingPointRange(RangeFacetRequest<?> facetRequest) throws IOException { List<? extends FacetRange<?>> facetRanges = facetRequest.getFacetRangeList(); DoubleRange[] ranges = new DoubleRange[facetRanges.size()]; int i = 0; for ( FacetRange<?> facetRange : facetRanges ) { ranges[i] = new DoubleRange( facetRange.getRangeString(), facetRange.getMin() == null ? Double.MIN_VALUE : ( (Number) facetRange.getMin() ).doubleValue(), facetRange.isMinIncluded(), facetRange.getMax() == null ? Double.MAX_VALUE : ( (Number) facetRange.getMax() ).doubleValue(), facetRange.isMaxIncluded() ); i++; } DoubleRangeFacetCounts facetCount = new DoubleRangeFacetCounts( facetRequest.getFieldName(), facetsCollector, ranges ); return facetCount.getTopChildren( facetRequest.getMaxNumberOfFacets(), facetRequest.getFieldName() ); }
private List<Facet> extractRangeFacets(JsonObject aggregations, RangeFacetRequest<?> facetRequest, FacetMetadata facetMetadata) { if ( !ReflectionHelper.isIntegerType( facetRequest.getFacetValueType() ) && !Date.class.isAssignableFrom( facetRequest.getFacetValueType() ) && !ReflectionHelper.isFloatingPointType( facetRequest.getFacetValueType() ) ) { throw LOG.unsupportedFacetRangeParameter( facetRequest.getFacetValueType().getName() ); } ArrayList<Facet> facets = new ArrayList<>(); for ( FacetRange<?> facetRange : facetRequest.getFacetRangeList() ) { JsonElement aggregation = aggregations.get( facetRequest.getFacetingName() + "-" + facetRange.getIdentifier() ); if ( aggregation == null ) { continue; } int docCount = aggregation.getAsJsonObject().get( "doc_count" ).getAsInt(); if ( docCount == 0 && !facetRequest.hasZeroCountsIncluded() ) { continue; } facets.add( facetRequest.createFacet( facetMetadata, facetRange.getRangeString(), docCount ) ); } return facets; }