Example usage for org.apache.solr.client.solrj.response PivotField getFieldStatsInfo

List of usage examples for org.apache.solr.client.solrj.response PivotField getFieldStatsInfo

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj.response PivotField getFieldStatsInfo.

Prototype

public Map<String, FieldStatsInfo> getFieldStatsInfo() 

Source Link

Usage

From source file:org.apache.drill.exec.store.solr.SolrRecordReader.java

License:Apache License

private int processFacetPivotResponse(List<PivotField> facetPivots) {
    SolrFacetPivot2ResultSet oSolrFacetPivot2ResultSet = new SolrFacetPivot2ResultSet();
    oSolrFacetPivot2ResultSet.build(facetPivots);
    int resultSeek = 0;
    int leafNodesSeek = 0;
    while (!oSolrFacetPivot2ResultSet.isEmpty()) {
        SolrFacetPivotRecord oSolrFacetPivotRecord = (SolrFacetPivotRecord) oSolrFacetPivot2ResultSet.pop();
        PivotField pivotField = oSolrFacetPivotRecord.getPivotField();
        String fieldName = pivotField.getField();
        Object fieldValue = pivotField.getValue();
        ValueVector vv = vectors.get(fieldName);
        if (oSolrFacetPivotRecord.getPivotSize() == 0) {
            Map<String, FieldStatsInfo> fieldStatsInfo = pivotField.getFieldStatsInfo();
            processRecord(vv, fieldValue, leafNodesSeek);
            int statsCounter = 0;

            if (isCountOnlyQuery()) {
                processCountQuery(vectors.get(String.valueOf(statsCounter)),
                        Long.valueOf(pivotField.getCount()), statsCounter, leafNodesSeek);
                statsCounter++;// w w w. ja  v  a2  s . com
            } else {
                for (SolrAggrParam solrAggrParam : solrAggrParams) {
                    FieldStatsInfo fieldStats = fieldStatsInfo.get(getSolrField(solrAggrParam.getFieldName(),
                            solrScanSpec.getCvSchema().getUniqueKey()));
                    String functionName = solrAggrParam.getFunctionName();

                    if (fieldStats != null) {
                        processStatsRecord(fieldStats, functionName, statsCounter, leafNodesSeek,
                                solrScanSpec.isGroup());
                        statsCounter++;

                        if (statsCounter == solrScanSpec.getProjectFieldNames().size()) {
                            break;
                        }
                    }
                }
            }
            leafNodesSeek++;
        } else {

            int start = (leafNodesSeek == oSolrFacetPivotRecord.getPivotSize()) ? 0
                    : Math.abs((leafNodesSeek - oSolrFacetPivotRecord.getPivotSize()));

            int end = (start == 0) ? leafNodesSeek : (start + oSolrFacetPivotRecord.getPivotSize());

            SolrRecordReader.logger.info("Start is : " + start + " End is : " + end);
            for (int i = start; i < end; i++) {
                processRecord(vv, fieldValue, i);
            }
            resultSeek += oSolrFacetPivotRecord.getPivotSize();
        }
    }
    return (resultSeek == 0) ? leafNodesSeek : resultSeek;
}

From source file:org.apache.metron.solr.dao.SolrSearchDao.java

License:Apache License

protected List<GroupResult> getGroupResults(GroupRequest groupRequest, int index,
        List<PivotField> pivotFields) {
    List<Group> groups = groupRequest.getGroups();
    List<GroupResult> searchResultGroups = new ArrayList<>();
    final GroupOrder groupOrder = groups.get(index).getOrder();
    pivotFields.sort((o1, o2) -> {/*from  www. j a  va2s  .c  o m*/
        String s1 = groupOrder.getGroupOrderType() == GroupOrderType.TERM ? o1.getValue().toString()
                : Integer.toString(o1.getCount());
        String s2 = groupOrder.getGroupOrderType() == GroupOrderType.TERM ? o2.getValue().toString()
                : Integer.toString(o2.getCount());
        if (groupOrder.getSortOrder() == SortOrder.ASC) {
            return s1.compareTo(s2);
        } else {
            return s2.compareTo(s1);
        }
    });

    for (PivotField pivotField : pivotFields) {
        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());
        }
        if (index < groups.size() - 1) {
            groupResult.setGroupedBy(groups.get(index + 1).getField());
            groupResult.setGroupResults(getGroupResults(groupRequest, index + 1, pivotField.getPivot()));
        }
        searchResultGroups.add(groupResult);
    }
    return searchResultGroups;
}

From source file:org.apache.metron.solr.dao.SolrSearchDaoTest.java

License:Apache License

@Test
public void getGroupResultsShouldProperlyReturnGroupResults() {
    GroupRequest groupRequest = new GroupRequest();
    Group group1 = new Group();
    group1.setField("field1");
    GroupOrder groupOrder1 = new GroupOrder();
    groupOrder1.setSortOrder("ASC");
    groupOrder1.setGroupOrderType("TERM");
    group1.setOrder(groupOrder1);//from w  w w .j  a va 2s  .  c  om
    Group group2 = new Group();
    group2.setField("field2");
    GroupOrder groupOrder2 = new GroupOrder();
    groupOrder2.setSortOrder("DESC");
    groupOrder2.setGroupOrderType("COUNT");
    group2.setOrder(groupOrder2);
    groupRequest.setGroups(Arrays.asList(group1, group2));
    groupRequest.setScoreField("score");

    PivotField level1Pivot1 = mock(PivotField.class);
    PivotField level1Pivot2 = mock(PivotField.class);
    PivotField level2Pivot1 = mock(PivotField.class);
    PivotField level2Pivot2 = mock(PivotField.class);
    FieldStatsInfo level1Pivot1FieldStatsInfo = mock(FieldStatsInfo.class);
    FieldStatsInfo level1Pivot2FieldStatsInfo = mock(FieldStatsInfo.class);
    FieldStatsInfo level2Pivot1FieldStatsInfo = mock(FieldStatsInfo.class);
    FieldStatsInfo level2Pivot2FieldStatsInfo = mock(FieldStatsInfo.class);
    List<PivotField> level1Pivots = Arrays.asList(level1Pivot1, level1Pivot2);
    List<PivotField> level2Pivots = Arrays.asList(level2Pivot1, level2Pivot2);

    when(level1Pivot1.getValue()).thenReturn("field1value1");
    when(level1Pivot1.getCount()).thenReturn(1);
    when(level1Pivot1FieldStatsInfo.getSum()).thenReturn(1.0);
    when(level1Pivot1.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>() {
        {
            put("score", level1Pivot1FieldStatsInfo);
        }
    });
    when(level1Pivot2.getValue()).thenReturn("field1value2");
    when(level1Pivot2.getCount()).thenReturn(2);
    when(level1Pivot2FieldStatsInfo.getSum()).thenReturn(2.0);
    when(level1Pivot2.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>() {
        {
            put("score", level1Pivot2FieldStatsInfo);
        }
    });
    when(level2Pivot1.getValue()).thenReturn("field2value1");
    when(level2Pivot1.getCount()).thenReturn(3);
    when(level2Pivot1FieldStatsInfo.getSum()).thenReturn(3.0);
    when(level2Pivot1.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>() {
        {
            put("score", level2Pivot1FieldStatsInfo);
        }
    });
    when(level2Pivot2.getValue()).thenReturn("field2value2");
    when(level2Pivot2.getCount()).thenReturn(4);
    when(level2Pivot2FieldStatsInfo.getSum()).thenReturn(4.0);
    when(level2Pivot2.getFieldStatsInfo()).thenReturn(new HashMap<String, FieldStatsInfo>() {
        {
            put("score", level2Pivot2FieldStatsInfo);
        }
    });
    when(level1Pivot1.getPivot()).thenReturn(level2Pivots);

    List<GroupResult> level1GroupResults = solrSearchDao.getGroupResults(groupRequest, 0, level1Pivots);

    assertEquals("field1value1", level1GroupResults.get(0).getKey());
    assertEquals(1, level1GroupResults.get(0).getTotal());
    assertEquals(1.0, level1GroupResults.get(0).getScore(), 0.00001);
    assertEquals("field2", level1GroupResults.get(0).getGroupedBy());
    assertEquals("field1value2", level1GroupResults.get(1).getKey());
    assertEquals(2, level1GroupResults.get(1).getTotal());
    assertEquals(2.0, level1GroupResults.get(1).getScore(), 0.00001);
    assertEquals("field2", level1GroupResults.get(1).getGroupedBy());
    assertEquals(0, level1GroupResults.get(1).getGroupResults().size());

    List<GroupResult> level2GroupResults = level1GroupResults.get(0).getGroupResults();
    assertEquals("field2value2", level2GroupResults.get(0).getKey());
    assertEquals(4, level2GroupResults.get(0).getTotal());
    assertEquals(4.0, level2GroupResults.get(0).getScore(), 0.00001);
    assertNull(level2GroupResults.get(0).getGroupedBy());
    assertNull(level2GroupResults.get(0).getGroupResults());
    assertEquals("field2value1", level2GroupResults.get(1).getKey());
    assertEquals(3, level2GroupResults.get(1).getTotal());
    assertEquals(3.0, level2GroupResults.get(1).getScore(), 0.00001);
    assertNull(level2GroupResults.get(1).getGroupedBy());
    assertNull(level2GroupResults.get(1).getGroupResults());
}