private List<GroupResult> getGroupResults(List<Group> groups, int index) { Group group = groups.get(index); GroupResult groupResult = new GroupResult(); groupResult.setKey(group.getField() + "_value"); if (index < groups.size() - 1) { groupResult.setGroupedBy(groups.get(index + 1).getField()); groupResult.setGroupResults(getGroupResults(groups, index + 1)); } else { groupResult.setScore(50.0); } groupResult.setTotal(10); return Collections.singletonList(groupResult); }
Assert.assertEquals("true", trueGroup.getKey()); Assert.assertEquals(6, trueGroup.getTotal()); Assert.assertEquals("latitude", trueGroup.getGroupedBy()); Assert.assertEquals(198.0, trueGroup.getScore(), 0.00001); List<GroupResult> trueLatitudeGroups = trueGroup.getGroupResults(); Assert.assertEquals(2, trueLatitudeGroups.size()); Assert.assertEquals(48.5839, Double.parseDouble(trueLatitudeGroup2.getKey()), 0.00001); Assert.assertEquals(5, trueLatitudeGroup2.getTotal()); Assert.assertEquals(148.0, trueLatitudeGroup2.getScore(), 0.00001); Assert.assertEquals(48.0001, Double.parseDouble(trueLatitudeGroup1.getKey()), 0.00001); Assert.assertEquals(1, trueLatitudeGroup1.getTotal()); Assert.assertEquals(50.0, trueLatitudeGroup1.getScore(), 0.00001); Assert.assertEquals("false", falseGroup.getKey()); Assert.assertEquals("latitude", falseGroup.getGroupedBy()); Assert.assertEquals(130.0, falseGroup.getScore(), 0.00001); List<GroupResult> falseLatitudeGroups = falseGroup.getGroupResults(); Assert.assertEquals(2, falseLatitudeGroups.size()); Assert.assertEquals(48.5839, Double.parseDouble(falseLatitudeGroup2.getKey()), 0.00001); Assert.assertEquals(3, falseLatitudeGroup2.getTotal()); Assert.assertEquals(80.0, falseLatitudeGroup2.getScore(), 0.00001); Assert.assertEquals(48.0001, Double.parseDouble(falseLatitudeGroup1.getKey()), 0.00001); Assert.assertEquals(1, falseLatitudeGroup1.getTotal()); Assert.assertEquals(50.0, falseLatitudeGroup1.getScore(), 0.00001);
@Test public void group_by_ip_query() throws Exception { GroupRequest request = JSONUtils.INSTANCE.load(groupByIpQuery, GroupRequest.class); GroupResponse response = getIndexDao().group(request); // expect only 1 group for 'ip_src_addr' Assert.assertEquals("ip_src_addr", response.getGroupedBy()); // there are 8 different 'ip_src_addr' values List<GroupResult> groups = response.getGroupResults(); Assert.assertEquals(8, groups.size()); // expect dotted-decimal notation in descending order Assert.assertEquals("192.168.1.8", groups.get(0).getKey()); Assert.assertEquals("192.168.1.7", groups.get(1).getKey()); Assert.assertEquals("192.168.1.6", groups.get(2).getKey()); Assert.assertEquals("192.168.1.5", groups.get(3).getKey()); Assert.assertEquals("192.168.1.4", groups.get(4).getKey()); Assert.assertEquals("192.168.1.3", groups.get(5).getKey()); Assert.assertEquals("192.168.1.2", groups.get(6).getKey()); Assert.assertEquals("192.168.1.1", groups.get(7).getKey()); }
Assert.assertEquals(4, falseGroup.getTotal()); Assert.assertEquals("ip_src_addr", falseGroup.getGroupedBy()); List<GroupResult> falseIpSrcAddrGroups = falseGroup.getGroupResults(); Assert.assertEquals(4, falseIpSrcAddrGroups.size()); Assert.assertEquals("192.168.1.8", falseIpSrcAddrGroup1.getKey()); Assert.assertEquals(1, falseIpSrcAddrGroup1.getTotal()); Assert.assertNull(falseIpSrcAddrGroup1.getGroupedBy()); Assert.assertNull(falseIpSrcAddrGroup1.getGroupResults()); Assert.assertEquals("192.168.1.7", falseIpSrcAddrGroup2.getKey()); Assert.assertEquals(1, falseIpSrcAddrGroup2.getTotal()); Assert.assertNull(falseIpSrcAddrGroup2.getGroupedBy()); Assert.assertNull(falseIpSrcAddrGroup2.getGroupResults()); Assert.assertEquals("192.168.1.6", falseIpSrcAddrGroup3.getKey()); Assert.assertEquals(1, falseIpSrcAddrGroup3.getTotal()); Assert.assertNull(falseIpSrcAddrGroup3.getGroupedBy()); Assert.assertNull(falseIpSrcAddrGroup3.getGroupResults()); Assert.assertEquals("192.168.1.2", falseIpSrcAddrGroup4.getKey()); Assert.assertEquals(1, falseIpSrcAddrGroup4.getTotal()); Assert.assertNull(falseIpSrcAddrGroup4.getGroupedBy()); Assert.assertNull(falseIpSrcAddrGroup4.getGroupResults()); Assert.assertEquals(6, trueGroup.getTotal()); Assert.assertEquals("ip_src_addr", trueGroup.getGroupedBy()); List<GroupResult> trueIpSrcAddrGroups = trueGroup.getGroupResults(); Assert.assertEquals(4, trueIpSrcAddrGroups.size());
private List<GroupResult> getGroupResults(GroupRequest groupRequest, int index, Aggregations aggregations, Map<String, FieldType> commonColumnMetadata) { List<Group> groups = groupRequest.getGroups(); String field = groups.get(index).getField(); List<GroupResult> searchResultGroups = new ArrayList<>(); if(aggregations != null) { Terms terms = aggregations.get(getGroupByAggregationName(field)); for (Bucket bucket : terms.getBuckets()) { GroupResult groupResult = new GroupResult(); groupResult.setKey(formatKey(bucket.getKey(), commonColumnMetadata.get(field))); groupResult.setTotal(bucket.getDocCount()); Optional<String> scoreField = groupRequest.getScoreField(); if (scoreField.isPresent()) { Sum score = bucket.getAggregations().get(getSumAggregationName(scoreField.get())); groupResult.setScore(score.getValue()); } if (index < groups.size() - 1) { groupResult.setGroupedBy(groups.get(index + 1).getField()); groupResult.setGroupResults(getGroupResults(groupRequest, index + 1, bucket.getAggregations(), commonColumnMetadata)); } searchResultGroups.add(groupResult); } } return searchResultGroups; } }
GroupResult groupResult = new GroupResult(); groupResult.setKey(pivotField.getValue().toString()); groupResult.setTotal(pivotField.getCount()); Optional<String> scoreField = groupRequest.getScoreField(); if (scoreField.isPresent()) { groupResult .setScore((Double) pivotField.getFieldStatsInfo().get(scoreField.get()).getSum()); groupResult.setGroupedBy(groups.get(index + 1).getField()); groupResult .setGroupResults(getGroupResults(groupRequest, index + 1, pivotField.getPivot()));