in src/main/java/org/apache/datasketches/server/DataQueryHandler.java [278:321]
private static JsonObject processFrequencyQuery(final JsonObject result, final JsonObject query, final Family type, final Object sketch) {
if (query == null || type != Family.FREQUENCY || sketch == null) {
return null;
}
final ItemsSketch<String> sk = (ItemsSketch<String>) sketch;
// check if we need a summary
final boolean addSummary = checkSummaryFlag(query);
if (!query.has(QUERY_ERRORTYPE_FIELD)) {
throw new SketchesException("Must specify a value for " + QUERY_ERRORTYPE_FIELD
+ " for Frequent Items queries");
}
final ErrorType errorType;
final String errorTypeString = query.get(QUERY_ERRORTYPE_FIELD).getAsString();
if (errorTypeString.equals(QUERY_ERRORTYPE_NO_FP)) {
errorType = ErrorType.NO_FALSE_POSITIVES;
} else if (errorTypeString.equals(QUERY_ERRORTYPE_NO_FN)) {
errorType = ErrorType.NO_FALSE_NEGATIVES;
} else {
throw new SketchesException("Unknown Frequent Items ErrorType: " + errorTypeString);
}
final ItemsSketch.Row<String>[] items = sk.getFrequentItems(errorType);
final JsonArray itemArray = new JsonArray();
for (final ItemsSketch.Row<String> item : items) {
final JsonObject row = new JsonObject();
row.addProperty(RESPONSE_ITEM_VALUE, item.getItem());
row.addProperty(RESPONSE_ITEM_ESTIMATE, item.getEstimate());
row.addProperty(RESPONSE_ITEM_UPPER_BOUND, item.getUpperBound());
row.addProperty(RESPONSE_ITEM_LOWER_BOUND, item.getLowerBound());
itemArray.add(row);
}
//final JsonObject result = new JsonObject();
result.add(RESPONSE_ITEMS_ARRAY, itemArray);
if (addSummary)
result.addProperty(RESPONSE_SUMMARY_FIELD, sk.toString());
return result;
}