List of usage examples for org.apache.solr.client.solrj.response GroupCommand getName
public String getName()
From source file:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
/** * Returns the count of distinct values for the facets. Uses groups for group counts. * Supports foffset and flimit for paging. Supports fsort 'count' or 'index'. * <p/>/*from w w w. j a v a2s . com*/ * TODO work out whether or not we should allow facet ranges to be downloaded.... */ public List<FacetResultDTO> getFacetCounts(SpatialSearchRequestParams searchParams) throws Exception { Collection<FacetResultDTO> facetResults = new ArrayList<FacetResultDTO>(); queryFormatUtils.formatSearchQuery(searchParams); String queryString = searchParams.getFormattedQuery(); searchParams.setFacet(false); searchParams.setPageSize(0); //get facet group counts SolrQuery query = initSolrQuery(searchParams, false, null); query.setQuery(queryString); query.setFields(null); query.setRows(0); searchParams.setPageSize(0); //exclude multivalue fields Set<IndexFieldDTO> fields = getIndexedFields(); List<String> multivalueFields = new ArrayList<String>(); for (String facet : searchParams.getFacets()) { boolean added = false; for (IndexFieldDTO f : fields) { if (f.getName().equals(facet) && !f.isMultivalue()) { query.add("group.field", facet); added = true; } } if (!added) { multivalueFields.add(facet); } } if (multivalueFields.size() > 0) { facetResults.addAll(getMultivalueFacetCounts(query, searchParams, multivalueFields)); } if (multivalueFields.size() < searchParams.getFacets().length) { //now use the supplied facets to add groups to the query // facet totals are slow, so only fetch when foffset == 0 and flimit != -1 Map<String, Integer> ngroups = new HashMap<String, Integer>(); GroupResponse groupResponse = null; if (searchParams.getFlimit() != -1 && searchParams.getFoffset() == 0) { query.add("group", "true"); query.add("group.ngroups", "true"); query.add("group.limit", "0"); QueryResponse response = runSolrQuery(query, searchParams); groupResponse = response.getGroupResponse(); for (GroupCommand gc : groupResponse.getValues()) { ngroups.put(gc.getName(), gc.getNGroups()); } } //include paged facets when flimit > 0 or flimit == -1 if (searchParams.getFlimit() != 0) { searchParams.setFacet(true); SolrQuery facetQuery = initSolrQuery(searchParams, false, null); facetQuery.setQuery(queryString); facetQuery.setFields(null); facetQuery.setSortField(searchParams.getSort(), ORDER.valueOf(searchParams.getDir())); QueryResponse qr = runSolrQuery(facetQuery, searchParams); SearchResultDTO searchResults = processSolrResponse(searchParams, qr, facetQuery, OccurrenceIndex.class); facetResults = searchResults.getFacetResults(); if (facetResults != null) { for (FacetResultDTO fr : facetResults) { if (searchParams.getFlimit() == -1) { fr.setCount(fr.getFieldResult().size()); } else { Integer count = ngroups.get(fr.getFieldName()); if (count != null) fr.setCount(count); } } } } else if (groupResponse != null) { //only return group counts for (GroupCommand gc : groupResponse.getValues()) { facetResults.add(new FacetResultDTO(gc.getName(), null, gc.getNGroups())); } } } return new ArrayList<FacetResultDTO>(facetResults); }
From source file:au.org.ala.biocache.dao.SearchDAOImpl.java
License:Open Source License
/** * Perform grouped facet query./*from w w w . ja v a2 s.c om*/ * <p> * facets is the list of grouped facets required * flimit restricts the number of groups returned * pageSize restricts the number of docs in each group returned * fl is the list of fields in the returned docs */ public List<GroupFacetResultDTO> searchGroupedFacets(SpatialSearchRequestParams searchParams) throws Exception { queryFormatUtils.formatSearchQuery(searchParams); String queryString = searchParams.getFormattedQuery(); searchParams.setFacet(false); //get facet group counts SolrQuery query = initSolrQuery(searchParams, false, null); query.setQuery(queryString); query.setFields(null); //now use the supplied facets to add groups to the query query.add("group", "true"); query.add("group.ngroups", "true"); query.add("group.limit", String.valueOf(searchParams.getPageSize())); query.setRows(searchParams.getFlimit()); query.setFields(searchParams.getFl()); for (String facet : searchParams.getFacets()) { query.add("group.field", facet); } QueryResponse response = runSolrQuery(query, searchParams); GroupResponse groupResponse = response.getGroupResponse(); List<GroupFacetResultDTO> output = new ArrayList(); for (GroupCommand gc : groupResponse.getValues()) { List<GroupFieldResultDTO> list = new ArrayList<GroupFieldResultDTO>(); String facet = gc.getName(); for (Group v : gc.getValues()) { List<OccurrenceIndex> docs = (new DocumentObjectBinder()).getBeans(OccurrenceIndex.class, v.getResult()); //build facet displayName and fq String value = v.getGroupValue(); Long count = v.getResult() != null ? v.getResult().getNumFound() : 0L; if (value == null) { list.add(new GroupFieldResultDTO("", count, "-" + facet + ":*", docs)); } else { list.add(new GroupFieldResultDTO(getFacetValueDisplayName(facet, value), count, facet + ":\"" + value + "\"", docs)); } } output.add(new GroupFacetResultDTO(gc.getName(), list, gc.getNGroups())); } return output; }
From source file:com.frank.search.solr.core.ResultHelper.java
License:Apache License
static <T> Map<Object, GroupResult<T>> convertGroupQueryResponseToGroupResultMap(Query query, Map<String, Object> objectNames, QueryResponse response, SolrTemplate solrTemplate, Class<T> clazz) { GroupResponse groupResponse = response.getGroupResponse(); SolrDocumentList sdl = response.getResults(); if (groupResponse == null) { return Collections.emptyMap(); }/*w ww .j a v a 2 s . c o m*/ Map<Object, GroupResult<T>> result = new LinkedHashMap<Object, GroupResult<T>>(); List<GroupCommand> values = groupResponse.getValues(); for (GroupCommand groupCommand : values) { List<GroupEntry<T>> groupEntries = new ArrayList<GroupEntry<T>>(); for (Group group : groupCommand.getValues()) { SolrDocumentList documentList = group.getResult(); List<T> beans = solrTemplate.convertSolrDocumentListToBeans(documentList, clazz); Page<T> page = new PageImpl<T>(beans, query.getGroupOptions().getPageRequest(), documentList.getNumFound()); groupEntries.add(new SimpleGroupEntry<T>(group.getGroupValue(), page)); } int matches = groupCommand.getMatches(); Integer ngroups = groupCommand.getNGroups(); String name = groupCommand.getName(); PageImpl<GroupEntry<T>> page; if (ngroups != null) { page = new PageImpl<GroupEntry<T>>(groupEntries, query.getPageRequest(), ngroups.intValue()); } else { page = new PageImpl<GroupEntry<T>>(groupEntries); } SimpleGroupResult<T> groupResult = new SimpleGroupResult<T>(matches, ngroups, name, page); result.put(name, groupResult); if (objectNames.containsKey(name)) { result.put(objectNames.get(name), groupResult); } } return result; }
From source file:com.nridge.ds.solr.SolrResponseBuilder.java
License:Open Source License
private void populateGroupResponse(QueryResponse aQueryResponse) { Logger appLogger = mAppMgr.getLogger(this, "populateGroupResponse"); appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER); GroupResponse groupResponse = aQueryResponse.getGroupResponse(); if (groupResponse != null) { mDocument.addRelationship(Solr.RESPONSE_GROUP, createGroupsBag()); Relationship groupRelationship = mDocument.getFirstRelationship(Solr.RESPONSE_GROUP); if (groupRelationship != null) { DataBag groupingBag = groupRelationship.getBag(); List<GroupCommand> groupCommandList = groupResponse.getValues(); if (groupCommandList != null) { String groupName; DataField dfGroupName = groupingBag.getFieldByName("group_name"); groupingBag.setValueByName("group_total", groupCommandList.size()); for (GroupCommand groupCommand : groupCommandList) { groupName = groupCommand.getName(); if (StringUtils.isNotEmpty(groupName)) dfGroupName.addValue(groupName); groupingBag.setValueByName("group_matches", groupCommand.getMatches()); List<Group> groupList = groupCommand.getValues(); if (groupList != null) { for (Group groupMember : groupList) groupRelationship.add(createGroupCollectionDocument(groupMember)); }//from www . j a v a 2s . co m } } } } appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART); }
From source file:com.yaotrue.learn.solr.SolrjTest.java
License:Apache License
@Test public void testGroup() throws SolrServerException, IOException { SolrQuery solrQuery = new SolrQuery("*:*"); solrQuery.set(GroupParams.GROUP, true); solrQuery.set(GroupParams.GROUP_TOTAL_COUNT, true); solrQuery.set(GroupParams.GROUP_LIMIT, 12); solrQuery.set(GroupParams.GROUP_FORMAT, "grouped"); solrQuery.set(GroupParams.GROUP_FACET, true); solrQuery.set(GroupParams.GROUP_FIELD, "style"); QueryResponse queryResponse = solrClient.query(solrQuery); GroupResponse groupResponse = queryResponse.getGroupResponse(); if (null != groupResponse) { List<GroupCommand> groupCommandList = groupResponse.getValues(); for (GroupCommand groupCommand : groupCommandList) { int matches = groupCommand.getMatches(); String name = groupCommand.getName(); Integer ngroups = groupCommand.getNGroups(); List<Group> groupList = groupCommand.getValues(); for (Group group : groupList) { SolrDocumentList solrDocumentList = group.getResult(); ListIterator<SolrDocument> listIterator = solrDocumentList.listIterator(); while (listIterator.hasNext()) { SolrDocument solrDocument = listIterator.next(); System.out.println(solrDocument.get("code")); }/*from w w w. j a va 2 s. co m*/ } } } }
From source file:org.springframework.data.solr.core.ResultHelper.java
License:Apache License
static <T> Map<Object, GroupResult<T>> convertGroupQueryResponseToGroupResultMap(Query query, Map<String, Object> objectNames, QueryResponse response, SolrTemplate solrTemplate, Class<T> clazz) { GroupResponse groupResponse = response.getGroupResponse(); if (groupResponse == null) { return Collections.emptyMap(); }//from w w w .java2s . c o m Map<Object, GroupResult<T>> result = new LinkedHashMap<Object, GroupResult<T>>(); List<GroupCommand> values = groupResponse.getValues(); for (GroupCommand groupCommand : values) { List<GroupEntry<T>> groupEntries = new ArrayList<GroupEntry<T>>(); for (Group group : groupCommand.getValues()) { SolrDocumentList documentList = group.getResult(); List<T> beans = solrTemplate.convertSolrDocumentListToBeans(documentList, clazz); Page<T> page = new PageImpl<T>(beans, query.getGroupOptions().getPageRequest(), documentList.getNumFound()); groupEntries.add(new SimpleGroupEntry<T>(group.getGroupValue(), page)); } int matches = groupCommand.getMatches(); Integer ngroups = groupCommand.getNGroups(); String name = groupCommand.getName(); PageImpl<GroupEntry<T>> page; if (ngroups != null) { page = new PageImpl<GroupEntry<T>>(groupEntries, query.getPageRequest(), ngroups.intValue()); } else { page = new PageImpl<GroupEntry<T>>(groupEntries); } SimpleGroupResult<T> groupResult = new SimpleGroupResult<T>(matches, ngroups, name, page); result.put(name, groupResult); if (objectNames.containsKey(name)) { result.put(objectNames.get(name), groupResult); } } return result; }
From source file:org.springframework.data.solr.core.ResultHelperTests.java
License:Apache License
/** * @see DATASOLR-121// w ww.jav a 2 s. c o m */ @Test public void testConvertGroupQueryResponseToGroupResultList() { GroupResponse groupResponse = Mockito.mock(GroupResponse.class); Query query = Mockito.mock(Query.class); SolrTemplate solrTemplate = Mockito.mock(SolrTemplate.class); GroupCommand groupCommand1 = Mockito.mock(GroupCommand.class); Group group1_1 = Mockito.mock(Group.class); SolrDocumentList group1_1DocumentList = Mockito.mock(SolrDocumentList.class); List<Object> documents1_1 = Arrays.asList(new Object()); Mockito.when(response.getGroupResponse()).thenReturn(groupResponse); Mockito.when(groupResponse.getValues()).thenReturn(Arrays.asList(groupCommand1)); Mockito.when(groupCommand1.getValues()).thenReturn(Arrays.asList(group1_1)); Mockito.when(group1_1.getResult()).thenReturn(group1_1DocumentList); Mockito.when(group1_1.getGroupValue()).thenReturn("group1_1_value"); Mockito.when(group1_1DocumentList.getNumFound()).thenReturn(3L); Mockito.when(solrTemplate.convertSolrDocumentListToBeans(group1_1DocumentList, Object.class)) .thenReturn(documents1_1); Mockito.when(groupCommand1.getMatches()).thenReturn(1); Mockito.when(groupCommand1.getName()).thenReturn("group1_name"); Mockito.when(groupCommand1.getNGroups()).thenReturn(2); GroupOptions groupOptions = new GroupOptions(); groupOptions.setLimit(1); Mockito.when(query.getPageRequest()).thenReturn(new PageRequest(0, 1)); Mockito.when(query.getGroupOptions()).thenReturn(groupOptions); Object group1Key = new Object(); Map<String, Object> objectNames = new HashMap<String, Object>(); objectNames.put("group1_name", group1Key); Map<Object, GroupResult<Object>> result = ResultHelper.convertGroupQueryResponseToGroupResultMap(query, objectNames, response, solrTemplate, Object.class); Assert.assertNotNull(result); Assert.assertEquals(2, result.size()); GroupResult<Object> groupResult = result.get("group1_name"); Assert.assertEquals(groupResult, result.get(group1Key)); Assert.assertEquals("group1_name", groupResult.getName()); Assert.assertEquals(1, groupResult.getMatches()); Assert.assertEquals(Integer.valueOf(2), groupResult.getGroupsCount()); Page<GroupEntry<Object>> groupEntries = groupResult.getGroupEntries(); Assert.assertEquals(2, groupEntries.getTotalElements()); Assert.assertEquals(2, groupEntries.getTotalPages()); Assert.assertEquals(true, groupEntries.hasNext()); List<GroupEntry<Object>> groupEntriesContent = groupEntries.getContent(); Assert.assertNotNull(groupEntriesContent); Assert.assertEquals(1, groupEntriesContent.size()); GroupEntry<Object> groupEntriesContentElement = groupEntriesContent.get(0); Assert.assertEquals("group1_1_value", groupEntriesContentElement.getGroupValue()); Page<Object> group1result = groupEntriesContentElement.getResult(); Assert.assertEquals(3, group1result.getTotalElements()); Assert.assertEquals(3, group1result.getTotalPages()); Assert.assertEquals(true, group1result.hasNext()); }
From source file:org.springframework.data.solr.core.ResultHelperTests.java
License:Apache License
/** * @see DATASOLR-121/*from www.jav a 2s .com*/ */ @Test public void testConvertGroupQueryResponseToGroupResultListWhenNoCountOfGroups() { GroupResponse groupResponse = Mockito.mock(GroupResponse.class); Query query = Mockito.mock(Query.class); SolrTemplate solrTemplate = Mockito.mock(SolrTemplate.class); GroupCommand groupCommand1 = Mockito.mock(GroupCommand.class); Group group1_1 = Mockito.mock(Group.class); SolrDocumentList group1_1DocumentList = Mockito.mock(SolrDocumentList.class); List<Object> documents1_1 = Arrays.asList(new Object()); Mockito.when(response.getGroupResponse()).thenReturn(groupResponse); Mockito.when(groupResponse.getValues()).thenReturn(Arrays.asList(groupCommand1)); Mockito.when(groupCommand1.getValues()).thenReturn(Arrays.asList(group1_1)); Mockito.when(group1_1.getResult()).thenReturn(group1_1DocumentList); Mockito.when(group1_1.getGroupValue()).thenReturn("group1_1_value"); Mockito.when(group1_1DocumentList.getNumFound()).thenReturn(3L); Mockito.when(solrTemplate.convertSolrDocumentListToBeans(group1_1DocumentList, Object.class)) .thenReturn(documents1_1); Mockito.when(groupCommand1.getMatches()).thenReturn(1); Mockito.when(groupCommand1.getName()).thenReturn("group1_name"); Mockito.when(groupCommand1.getNGroups()).thenReturn(null); GroupOptions groupOptions = new GroupOptions(); groupOptions.setLimit(1); Mockito.when(query.getPageRequest()).thenReturn(new PageRequest(0, 1)); Mockito.when(query.getGroupOptions()).thenReturn(groupOptions); Object group1Key = new Object(); Map<String, Object> objectNames = new HashMap<String, Object>(); objectNames.put("group1_name", group1Key); Map<Object, GroupResult<Object>> result = ResultHelper.convertGroupQueryResponseToGroupResultMap(query, objectNames, response, solrTemplate, Object.class); Assert.assertNotNull(result); Assert.assertEquals(2, result.size()); GroupResult<Object> groupResult = result.get("group1_name"); Assert.assertEquals(result.get(group1Key), groupResult); Assert.assertEquals("group1_name", groupResult.getName()); Assert.assertEquals(1, groupResult.getMatches()); Assert.assertEquals(null, groupResult.getGroupsCount()); Page<GroupEntry<Object>> groupEntries = groupResult.getGroupEntries(); Assert.assertEquals(1, groupEntries.getTotalElements()); Assert.assertEquals(1, groupEntries.getTotalPages()); Assert.assertEquals(false, groupEntries.hasNext()); List<GroupEntry<Object>> groupEntriesContent = groupEntries.getContent(); Assert.assertNotNull(groupEntriesContent); Assert.assertEquals(1, groupEntriesContent.size()); GroupEntry<Object> groupEntriesContentElement = groupEntriesContent.get(0); Assert.assertEquals("group1_1_value", groupEntriesContentElement.getGroupValue()); Page<Object> group1result = groupEntriesContentElement.getResult(); Assert.assertEquals(3, group1result.getTotalElements()); Assert.assertEquals(3, group1result.getTotalPages()); Assert.assertEquals(true, group1result.hasNext()); }