@Override public GroupResponse group(GroupRequest groupRequest) throws RestException { try { if (groupRequest.getIndices() == null || groupRequest.getIndices().isEmpty()) { groupRequest.setIndices(getDefaultIndices()); } return dao.group(groupRequest); } catch(InvalidSearchException ise) { throw new RestException(ise.getMessage(), ise); } }
/** * Build a group response. * @param groupRequest The original group request. * @param response The search response. * @return A group response. * @throws InvalidSearchException */ private GroupResponse buildGroupResponse( GroupRequest groupRequest, org.elasticsearch.action.search.SearchResponse response) throws InvalidSearchException { // build the search response Map<String, FieldType> commonColumnMetadata; try { commonColumnMetadata = columnMetadataDao.getColumnMetadata(groupRequest.getIndices()); } catch (IOException e) { throw new InvalidSearchException(String.format("Could not get common column metadata for indices %s", Arrays.toString(groupRequest.getIndices().toArray()))); } GroupResponse groupResponse = new GroupResponse(); groupResponse.setGroupedBy(groupRequest.getGroups().get(0).getField()); groupResponse.setGroupResults(getGroupResults(groupRequest, 0, response.getAggregations(), commonColumnMetadata)); return groupResponse; }
@Override public GroupResponse group(GroupRequest groupRequest) throws InvalidSearchException { try { String groupNames = groupRequest.getGroups().stream().map(Group::getField).collect( Collectors.joining(",")); SolrQuery query = new SolrQuery() .setStart(0) .setRows(0) .setQuery(groupRequest.getQuery()); query.set("collection", getCollections(groupRequest.getIndices())); Optional<String> scoreField = groupRequest.getScoreField(); if (scoreField.isPresent()) { query.set("stats", true); query.set("stats.field", String.format("{!tag=piv1 sum=true}%s", scoreField.get())); } query.set("facet", true); query.set("facet.pivot", String.format("{!stats=piv1}%s", groupNames)); QueryResponse response = client.query(query); return buildGroupResponse(groupRequest, response); } catch (IOException | SolrServerException e) { String msg = e.getMessage(); LOG.error(msg, e); throw new InvalidSearchException(msg, e); } }
/** * Builds a group search request. * @param groupRequest The Metron group request. * @param queryBuilder The search query. * @return An Elasticsearch search request. */ private org.elasticsearch.action.search.SearchRequest buildGroupRequest( GroupRequest groupRequest, QueryBuilder queryBuilder) { // handle groups TermsAggregationBuilder groups = getGroupsTermBuilder(groupRequest, 0); final SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder() .query(queryBuilder) .aggregation(groups); // return the search request String[] indices = wildcardIndices(groupRequest.getIndices()); return new org.elasticsearch.action.search.SearchRequest() .indices(indices) .source(searchSourceBuilder); }