private AggregationBuilder updateAggIfNested(AggregationBuilder lastAgg, Field field) { if (field.isNested()) { lastAgg = AggregationBuilders.nested(field.getName() + "Nested",field.getNestedPath()) .subAggregation(lastAgg); } return lastAgg; }
private static AbstractAggregationBuilder createRangeFacet(String metricKey, Double... thresholds) { RangeAggregationBuilder rangeAgg = AggregationBuilders.range(metricKey) .field(FIELD_MEASURES_VALUE); final int lastIndex = thresholds.length - 1; IntStream.range(0, thresholds.length) .forEach(i -> { if (i == 0) { rangeAgg.addUnboundedTo(thresholds[0]); rangeAgg.addRange(thresholds[0], thresholds[1]); } else if (i == lastIndex) { rangeAgg.addUnboundedFrom(thresholds[lastIndex]); } else { rangeAgg.addRange(thresholds[i], thresholds[i + 1]); } }); return AggregationBuilders.nested("nested_" + metricKey, FIELD_MEASURES) .subAggregation( AggregationBuilders.filter("filter_" + metricKey, termsQuery(FIELD_MEASURES_KEY, metricKey)) .subAggregation(rangeAgg)); }
.order(Terms.Order.count(false))); request.addAggregation(AggregationBuilders.nested(FIELD_NCLOC_LANGUAGE_DISTRIBUTION, FIELD_NCLOC_LANGUAGE_DISTRIBUTION) .subAggregation(AggregationBuilders.terms(FIELD_NCLOC_LANGUAGE_DISTRIBUTION + "_terms") .field(FIELD_DISTRIB_LANGUAGE) .size(MAX_PAGE_SIZE) .subAggregation(AggregationBuilders.filter(NCLOC_KEY + "_filter", termQuery(FIELD_MEASURES_KEY, NCLOC_KEY)) .subAggregation(sum(NCLOC_KEY + "_filter_sum").field(FIELD_MEASURES_VALUE))));
private static AbstractAggregationBuilder createRatingFacet(String metricKey) { return AggregationBuilders.nested("nested_" + metricKey, FIELD_MEASURES) .subAggregation( AggregationBuilders.filter("filter_" + metricKey, termsQuery(FIELD_MEASURES_KEY, metricKey)) .subAggregation(filters(metricKey, new KeyedFilter("1", termQuery(FIELD_MEASURES_VALUE, 1d)), new KeyedFilter("2", termQuery(FIELD_MEASURES_VALUE, 2d)), new KeyedFilter("3", termQuery(FIELD_MEASURES_VALUE, 3d)), new KeyedFilter("4", termQuery(FIELD_MEASURES_VALUE, 4d)), new KeyedFilter("5", termQuery(FIELD_MEASURES_VALUE, 5d))))); }
private AggregationBuilder updateAggIfNested(AggregationBuilder lastAgg, Field field) { if (field.isNested()) { lastAgg = AggregationBuilders.nested(field.getName() + "Nested",field.getNestedPath()) .subAggregation(lastAgg); } return lastAgg; }
/** * 增加属性的聚合 * * @param nativeSearchQueryBuilder 查询主体 */ private void addAttributeAggregation(NativeSearchQueryBuilder nativeSearchQueryBuilder) { nativeSearchQueryBuilder.addAggregation(AggregationBuilders.nested("esAttributes", "esAttributes").subAggregation(AggregationBuilders.terms("attributeName").field("esAttributes.attributeName").subAggregation(AggregationBuilders.terms("attributeValue").field("esAttributes.attributeValue")))); }
private static AbstractAggregationBuilder createRangeFacet(String metricKey, Double... thresholds) { RangeAggregationBuilder rangeAgg = AggregationBuilders.range(metricKey) .field(FIELD_MEASURES_VALUE); final int lastIndex = thresholds.length - 1; IntStream.range(0, thresholds.length) .forEach(i -> { if (i == 0) { rangeAgg.addUnboundedTo(thresholds[0]); rangeAgg.addRange(thresholds[0], thresholds[1]); } else if (i == lastIndex) { rangeAgg.addUnboundedFrom(thresholds[lastIndex]); } else { rangeAgg.addRange(thresholds[i], thresholds[i + 1]); } }); return AggregationBuilders.nested("nested_" + metricKey, FIELD_MEASURES) .subAggregation( AggregationBuilders.filter("filter_" + metricKey, termsQuery(FIELD_MEASURES_KEY, metricKey)) .subAggregation(rangeAgg)); }
.order(Terms.Order.count(false))); request.addAggregation(AggregationBuilders.nested(FIELD_NCLOC_LANGUAGE_DISTRIBUTION, FIELD_NCLOC_LANGUAGE_DISTRIBUTION) .subAggregation(AggregationBuilders.terms(FIELD_NCLOC_LANGUAGE_DISTRIBUTION + "_terms") .field(FIELD_DISTRIB_LANGUAGE) .size(MAX_PAGE_SIZE) .subAggregation(AggregationBuilders.filter(NCLOC_KEY + "_filter", termQuery(FIELD_MEASURES_KEY, NCLOC_KEY)) .subAggregation(sum(NCLOC_KEY + "_filter_sum").field(FIELD_MEASURES_VALUE))));
private static AbstractAggregationBuilder createRatingFacet(String metricKey) { return AggregationBuilders.nested("nested_" + metricKey, FIELD_MEASURES) .subAggregation( AggregationBuilders.filter("filter_" + metricKey, termsQuery(FIELD_MEASURES_KEY, metricKey)) .subAggregation(filters(metricKey, new KeyedFilter("1", termQuery(FIELD_MEASURES_VALUE, 1d)), new KeyedFilter("2", termQuery(FIELD_MEASURES_VALUE, 2d)), new KeyedFilter("3", termQuery(FIELD_MEASURES_VALUE, 3d)), new KeyedFilter("4", termQuery(FIELD_MEASURES_VALUE, 4d)), new KeyedFilter("5", termQuery(FIELD_MEASURES_VALUE, 5d))))); }
searchRequestBuilder.addAggregation(AggregationBuilders.nested(TAG_FACET_AGGS, NESTED_BDEFTAGS_PATH).subAggregation( AggregationBuilders.terms(TAGTYPE_CODE_AGGREGATION).field(BDEF_TAGTYPE_CODE_FIELD).subAggregation( AggregationBuilders.terms(TAGTYPE_NAME_AGGREGATION).field(BDEF_TAGTYPE_NAME_FIELD).subAggregation(
searchRequestBuilder.addAggregation(AggregationBuilders.nested(TAG_FACET_AGGS, NESTED_BDEFTAGS_PATH).subAggregation( AggregationBuilders.terms(TAGTYPE_CODE_AGGREGATION).field(BDEF_TAGTYPE_CODE_FIELD).subAggregation( AggregationBuilders.terms(TAGTYPE_NAME_AGGREGATION).field(BDEF_TAGTYPE_NAME_FIELD).subAggregation(
private AggregationBuilder buildObjectsAggregation(FactSearchCriteria criteria) { // 1. Reduce to Facts matching the search criteria. return filter(FILTER_FACTS_AGGREGATION_NAME, buildFactsQuery(criteria)) // 2. Map to nested Object documents. .subAggregation(nested(NESTED_OBJECTS_AGGREGATION_NAME, "objects") // 3. Reduce to Objects matching the search criteria. .subAggregation(filter(FILTER_OBJECTS_AGGREGATION_NAME, buildObjectsQuery(criteria)) // 4. Calculate the number of unique Objects by id. This will give the 'count' value. // If 'count' is smaller than MAX_RESULT_WINDOW a correct value is expected, thus, // the precision threshold is set to MAX_RESULT_WINDOW. .subAggregation(cardinality(OBJECTS_COUNT_AGGREGATION_NAME) .field("objects.id") .precisionThreshold(MAX_RESULT_WINDOW) ) // 5. Reduce to buckets of unique Objects by id, restricted to the search criteria's limit. // This will give the actual search results. .subAggregation(terms(UNIQUE_OBJECTS_AGGREGATION_NAME) .field("objects.id") .size(calculateMaximumSize(criteria)) // 6. Map to the unique Object's source. Set size to 1, because all Objects in one // bucket are the same (ignoring 'direction' which isn't relevant for Object search). .subAggregation(topHits(UNIQUE_OBJECTS_SOURCE_AGGREGATION_NAME) .size(1) ) ) ) ); }
.subAggregation(filter(FILTER_OBJECTS_AGGREGATION_NAME, objectsQuery)