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

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

Introduction

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

Prototype

public Map<String, FieldStatsInfo> getFieldStatsInfo() 

Source Link

Usage

From source file:au.org.ala.biocache.dao.SearchDAOImpl.java

License:Open Source License

/**
 * @see au.org.ala.biocache.dao.SearchDAO#getStatistics(SpatialSearchRequestParams)
 *///  www  . j a v a 2  s .  c o  m
public Map<String, FieldStatsInfo> getStatistics(SpatialSearchRequestParams searchParams) throws Exception {
    try {
        queryFormatUtils.formatSearchQuery(searchParams);
        String queryString = searchParams.getFormattedQuery();
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(queryString);
        for (String field : searchParams.getFacets()) {
            solrQuery.setGetFieldStatistics(field);
        }
        QueryResponse qr = runSolrQuery(solrQuery, searchParams);
        if (logger.isDebugEnabled()) {
            logger.debug(qr.getFieldStatsInfo());
        }
        return qr.getFieldStatsInfo();

    } catch (SolrServerException ex) {
        logger.error("Problem communicating with SOLR server. " + ex.getMessage(), ex);
    }
    return null;
}

From source file:au.org.ala.biocache.dao.SearchDAOImpl.java

License:Open Source License

/**
 * @see au.org.ala.biocache.dao.SearchDAO#searchStat
 *///w  ww.j a  va2s  .co m
public List<FieldStatsItem> searchStat(SpatialSearchRequestParams searchParams, String field, String facet)
        throws Exception {
    searchParams.setFacets(new String[] {});

    queryFormatUtils.formatSearchQuery(searchParams);
    String queryString = searchParams.getFormattedQuery();

    if (facet != null)
        searchParams.setFacet(true);

    //get facet group counts
    SolrQuery query = initSolrQuery(searchParams, false, null);
    query.setQuery(queryString);
    query.setFields(null);
    //query.setFacetLimit(-1);

    //stats parameters
    query.add("stats", "true");
    if (facet != null)
        query.add("stats.facet", facet);
    query.add("stats.field", field);

    query.setRows(0);
    searchParams.setPageSize(0);
    QueryResponse response = runSolrQuery(query, searchParams);

    List<FieldStatsItem> output = new ArrayList();
    if (facet != null && response.getFieldStatsInfo().size() > 0) {
        for (FieldStatsInfo f : response.getFieldStatsInfo().values().iterator().next().getFacets().values()
                .iterator().next()) {
            FieldStatsItem item = new FieldStatsItem(f);
            if (f.getName() == null) {
                item.setFq("-" + facet + ":*");
            } else {
                item.setFq(facet + ":\"" + f.getName() + "\"");
            }
            item.setLabel(f.getName());
            output.add(item);
        }
    } else {
        if (response.getFieldStatsInfo().size() > 0) {
            output.add(new FieldStatsItem(response.getFieldStatsInfo().values().iterator().next()));
        }
    }

    return output;
}

From source file:com.francelabs.datafari.statistics.StatsProcessor.java

License:Apache License

public static void processStatsResponse(final QueryResponse queryResponse) throws Exception {
    final NamedList responseHeader = queryResponse.getResponseHeader();
    final FacetField QFacet = queryResponse.getFacetField("q");

    final Long numTot = queryResponse.getResults().getNumFound();

    final SolrDocumentList solrDocumentList = new SolrDocumentList();
    solrDocumentList.setNumFound(QFacet.getValueCount());
    solrDocumentList.setStart(0);/*  www .  j  av  a2s .c o  m*/

    if (numTot != 0) {
        final Map<String, FieldStatsInfo> stats = queryResponse.getFieldStatsInfo();
        final List<FieldStatsInfo> noHitsStats = stats.get("noHits").getFacets().get("q");
        final List<FieldStatsInfo> QTimeStats = stats.get("QTime").getFacets().get("q");
        List<FieldStatsInfo> positionClickTotStats = null;
        try {
            positionClickTotStats = stats.get("positionClickTot").getFacets().get("q");
        } catch (final Exception e) {

        }
        final List<FieldStatsInfo> clickStats = stats.get("click").getFacets().get("q");
        final List<FieldStatsInfo> numClicksStats = stats.get("numClicks").getFacets().get("q");
        final List<FieldStatsInfo> numFoundStats = stats.get("numFound").getFacets().get("q");

        final List<Count> QFacetValues = QFacet.getValues();

        final Map<String, SolrDocument> mapDocuments = new HashMap<String, SolrDocument>();

        for (int i = 0; i < QFacetValues.size(); i++) {
            final SolrDocument doc = new SolrDocument();
            final String query = QFacetValues.get(i).getName();

            final double count = QFacetValues.get(i).getCount();
            final double frequency = StatsUtils.round(count * 100 / numTot, 2, BigDecimal.ROUND_HALF_UP);

            doc.addField("query", query);

            doc.addField("count", count);
            doc.addField("frequency", frequency);
            mapDocuments.put(query, doc);
            solrDocumentList.add(doc);
        }

        for (int i = 0; i < QTimeStats.size(); i++) {
            final String query = QTimeStats.get(i).getName();
            final SolrDocument doc = mapDocuments.get(query);

            final int AVGHits = new Double((Double) numFoundStats.get(i).getMean()).intValue();
            final Double noHits = new Double((Double) noHitsStats.get(i).getSum());
            final int AVGQTime = new Double((Double) QTimeStats.get(i).getMean()).intValue();
            final int MAXQTime = new Double((Double) QTimeStats.get(i).getMax()).intValue();
            final double click = new Double((Double) clickStats.get(i).getSum());
            final double clickRatio = StatsUtils.round(click * 100 / (Double) doc.getFirstValue("count"), 2,
                    BigDecimal.ROUND_HALF_UP);
            if (click > 0) {
                final double AVGClickPosition = new Double((Double) positionClickTotStats.get(i).getSum()
                        / (Double) numClicksStats.get(i).getSum()).intValue();

                doc.addField("AVGClickPosition", AVGClickPosition);

            } else {
                doc.addField("AVGClickPosition", "-");
            }

            doc.addField("withClickRatio", clickRatio);
            doc.addField("AVGHits", AVGHits);
            doc.addField("numNoHits", noHits);
            doc.addField("withClick", click);
            doc.addField("AVGQTime", AVGQTime);
            doc.addField("MaxQTime", MAXQTime);
        }

    }

    final NamedList<Object> response = new SimpleOrderedMap<Object>();
    response.add("responseHeader", responseHeader);
    response.add("response", solrDocumentList);
    queryResponse.setResponse(response);
}

From source file:com.frank.search.solr.core.SolrTemplate.java

License:Apache License

private <T> SolrResultPage<T> createSolrResultPage(Query query, Class<T> clazz, QueryResponse response,
        Map<String, Object> objectsName) {
    List<T> beans = convertQueryResponseToBeans(response, clazz);
    SolrDocumentList results = response.getResults();
    long numFound = results == null ? 0 : results.getNumFound();
    Float maxScore = results == null ? null : results.getMaxScore();

    Pageable pageRequest = query.getPageRequest();

    SolrResultPage<T> page = new SolrResultPage<T>(beans, pageRequest, numFound, maxScore);

    page.setFieldStatsResults(/* w  w w .  j ava 2s .  c om*/
            ResultHelper.convertFieldStatsInfoToFieldStatsResultMap(response.getFieldStatsInfo()));
    page.setGroupResults(
            ResultHelper.convertGroupQueryResponseToGroupResultMap(query, objectsName, response, this, clazz));

    return page;
}

From source file:com.nridge.ds.solr.SolrResponseBuilder.java

License:Open Source License

private void populateStatistic(QueryResponse aQueryResponse) {
    Object statObject;/*from ww w . ja  va2  s. c o  m*/
    DataField schemaField;
    FieldStatsInfo fieldStatsInfo;
    String fieldName, fieldTitle, fieldValue;
    Logger appLogger = mAppMgr.getLogger(this, "populateStatistic");

    appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER);

    Map<String, FieldStatsInfo> mapFieldStatsInfo = aQueryResponse.getFieldStatsInfo();
    if (mapFieldStatsInfo != null) {
        mDocument.addRelationship(Solr.RESPONSE_STATISTIC, createStatisticsBag());
        Relationship statisticRelationship = mDocument.getFirstRelationship(Solr.RESPONSE_STATISTIC);
        if (statisticRelationship != null) {
            DataBag statisticsBag = new DataBag(statisticRelationship.getBag());
            statisticsBag.setAssignedFlagAll(false);
            DataTable statisticTable = new DataTable(statisticsBag);
            DataBag resultBag = mBag;

            for (Map.Entry<String, FieldStatsInfo> entry : mapFieldStatsInfo.entrySet()) {
                statisticTable.newRow();
                fieldName = entry.getKey();
                fieldStatsInfo = entry.getValue();
                statisticTable.setValueByName("field_name", fieldName);
                schemaField = resultBag.getFieldByName(fieldName);
                if (schemaField == null)
                    fieldTitle = Field.nameToTitle(fieldName);
                else
                    fieldTitle = schemaField.getTitle();
                statisticTable.setValueByName("field_title", fieldTitle);
                statObject = fieldStatsInfo.getMin();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("min", fieldValue);
                statObject = fieldStatsInfo.getMax();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("max", fieldValue);
                statObject = fieldStatsInfo.getCount();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("count", fieldValue);
                statObject = fieldStatsInfo.getMissing();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("missing", fieldValue);
                statObject = fieldStatsInfo.getSum();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("sum", fieldValue);
                statObject = fieldStatsInfo.getMean();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("mean", fieldValue);
                statObject = fieldStatsInfo.getStddev();
                if (statObject == null)
                    fieldValue = StringUtils.EMPTY;
                else
                    fieldValue = statObject.toString();
                statisticTable.setValueByName("standard_deviation", fieldValue);
                statisticTable.addRow();
            }

            Document facetDocument = new Document(Solr.RESPONSE_STATISTIC, statisticTable);
            statisticRelationship.add(facetDocument);
        }
    }

    appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART);
}

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

License:Apache License

public SolrAggrReader(FragmentContext context, SolrSubScan config) {
    fc = context;/*from  w  w  w  .java2 s .  c  o m*/
    solrSubScan = config;

    solrServerUrl = solrSubScan.getSolrPlugin().getSolrStorageConfig().getSolrServer();
    scanList = solrSubScan.getScanList();
    solrClient = solrSubScan.getSolrPlugin().getSolrClient();
    solrClientApiExec = new SolrClientAPIExec(solrClient);

    String solrCoreName = scanList.get(0).getSolrCoreName();
    List<SchemaPath> colums = config.getColumns();
    SolrFilterParam filters = config.getSolrScanSpec().getFilter();
    solrAggrParams = config.getSolrScanSpec().getAggrParams();

    SolrSchemaResp oCVSchema = config.getSolrScanSpec().getCvSchema();

    if (oCVSchema.getSchemaFields() != null) {
        schemaFieldMap = new HashMap<String, SolrSchemaField>(oCVSchema.getSchemaFields().size());

        for (SolrSchemaField cvSchemaField : oCVSchema.getSchemaFields()) {
            schemaFieldMap.put(cvSchemaField.getFieldName(), cvSchemaField);
        }
    }

    StringBuilder sb = new StringBuilder();

    if (filters != null) {
        for (String filter : filters) {
            sb.append(filter);
        }
    }

    setColumns(colums);

    // Query Response
    if (!solrAggrParams.isEmpty()) {
        QueryResponse queryRsp = solrClientApiExec.getSolrFieldStats(solrServerUrl, solrCoreName,
                oCVSchema.getUniqueKey(), this.fields, sb);

        if (queryRsp != null) {
            fieldStatsInfoMap = queryRsp.getFieldStatsInfo();
        }
    }
}

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

License:Apache License

@Override
public int next() {
    int counter = 0;
    int statsCounter = 0;
    SolrRecordReader.logger.info("Use SOLR Stream : " + useSolrStream);

    QueryResponse rsp = null;
    String solrUrl = solrSubScan.getSolrScanSpec().getSolrUrl();
    String uniqueKey = solrSubScan.getSolrScanSpec().getCvSchema().getUniqueKey();
    String solrCoreName = solrSubScan.getSolrScanSpec().getSolrCoreName();
    SolrFilterParam filters = solrSubScan.getSolrScanSpec().getFilter();
    List<SolrSortParam> solrSortParams = solrSubScan.getSolrScanSpec().getSortParams();
    ArrayList<String> fieldListCopy = new ArrayList(this.fields);
    long solrDocFetchCount = solrSubScan.getSolrScanSpec().getSolrDocFetchCount(solrCoreName, fieldListCopy);
    boolean isDistinct = solrSubScan.getSolrScanSpec().isDistinct();
    boolean isGroup = solrSubScan.getSolrScanSpec().isGroup();
    boolean useFacetPivotFromGroupCount = isCountOnlyQuery() && isGroup;
    boolean isDataQuery = solrAggrParams.isEmpty() && !isGroup && !useFacetPivotFromGroupCount;

    if (!solrStreamReadFinished) {
        StringBuilder filterBuilder = new StringBuilder();
        if (filters != null) {
            for (String filter : filters) {
                filterBuilder.append(filter);
            }/* www .jav a  2 s . co m*/
        }

        if ((solrUrl != null) && solrUrl.contains(solrCoreName)) {
            solrServerUrl = solrUrl;
            solrCoreName = null; // setting it null since solrUrl already contains the coreName;
        }

        if (useSolrStream) {
            SolrStream solrStream = solrClientApiExec.getSolrStreamResponse(solrServerUrl, solrCoreName,
                    this.fields, filterBuilder, uniqueKey, solrDocFetchCount);

            counter = processSolrStream(solrStream);
        } else {

            if (!solrAggrParams.isEmpty() && !isGroup && isCountOnlyQuery()) {
                SolrRecordReader.logger.info("Processing COUNT only query...");
                ValueVector vv1 = vectors.get(String.valueOf(statsCounter));
                processCountQuery(vv1, solrDocFetchCount, statsCounter, counter);
                statsCounter++;
                counter++; // actual record counter
            } else {
                if (solrDocFetchCount != 0) {
                    if (isDistinct) {
                        // make facet query.
                    }

                    if (isDataQuery && !solrSubScan.getSolrScanSpec().isLimitApplied()) {
                        solrDocFetchCount = SolrPluginConstants.SOLR_DEFAULT_FETCH_COUNT;
                    }
                    rsp = solrClientApiExec.getSolrDocs(solrServerUrl, solrCoreName, uniqueKey, this.fields,
                            solrDocFetchCount, cursorMark, filterBuilder, solrAggrParams, solrSortParams,
                            solrScanSpec.getProjectFieldNames(), isGroup, isCountOnlyQuery());

                    SolrDocumentList solrDocList = rsp.getResults();
                    Map<String, FieldStatsInfo> fieldStatsInfoMap = rsp.getFieldStatsInfo();
                    NamedList<List<PivotField>> facetPivots = rsp.getFacetPivot();

                    // solr doc iteration
                    if (solrDocList != null) {
                        counter = processSolrDocs(solrDocList);
                    }
                    // facet iteration (for single group by)
                    if (rsp.getFacetFields() != null) {
                        counter = processFacetResponse(rsp, isCountOnlyQuery());
                    }
                    // stats/stats.facet iteration (for stats with single group by should be replace by
                    // facet pivot)
                    if (fieldStatsInfoMap != null) {
                        counter = processStatsFieldResponse(fieldStatsInfoMap, isGroup, uniqueKey);
                    }
                    // facet pivot response
                    if (facetPivots != null) {
                        List<PivotField> pivotList = facetPivots.get(Joiner.on(",").join(fields));
                        counter = processFacetPivotResponse(pivotList);
                    }
                }
            }
        }

    }
    for (String key : vectors.keySet()) {
        ValueVector vv = vectors.get(key);
        vv.getMutator().setValueCount(counter);
    }
    if (isDataQuery && rsp != null && cursorMark != rsp.getNextCursorMark()) {
        solrStreamReadFinished = false;
        cursorMark = rsp.getNextCursorMark();
        SolrRecordReader.logger
                .info("Retrieving resultset from SOLR is not yet finished. Retriving with next cursor [ "
                        + cursorMark + " ] with rows:" + solrDocFetchCount);
    } else {
        solrStreamReadFinished = true;
    }
    return counter;
}

From source file:org.apache.nifi.processors.solr.QuerySolr.java

License:Apache License

private static void addStatsFromSolrResponseToJsonWriter(final QueryResponse response, final JsonWriter writer)
        throws IOException {
    writer.beginObject();//  w ww  .  ja v  a  2  s  . co  m
    writer.name("stats_fields");
    writer.beginObject();
    for (Map.Entry<String, FieldStatsInfo> entry : response.getFieldStatsInfo().entrySet()) {
        FieldStatsInfo fsi = entry.getValue();
        writer.name(entry.getKey());
        writer.beginObject();
        writer.name("min").value(fsi.getMin().toString());
        writer.name("max").value(fsi.getMax().toString());
        writer.name("count").value(fsi.getCount());
        writer.name("missing").value(fsi.getMissing());
        writer.name("sum").value(fsi.getSum().toString());
        writer.name("mean").value(fsi.getMean().toString());
        writer.name("sumOfSquares").value(fsi.getSumOfSquares());
        writer.name("stddev").value(fsi.getStddev());
        writer.endObject();
    }
    writer.endObject();
    writer.endObject();
}

From source file:org.mousephenotype.cda.solr.service.ObservationService.java

License:Apache License

/**
 * Get stats for the baseline graphs on the phenotype pages for each parameter/center
 * if phenotypingCenter is null just return all stats for the center otherwise filter on that center
 *//*from  w  w  w.  j  av  a  2s  .  c o  m*/
public List<FieldStatsInfo> getStatisticsForParameterFromCenter(String parameterStableId,
        String phenotypingCenter) throws SolrServerException, IOException {
    //http://ves-ebi-d0.ebi.ac.uk:8090/mi/impc/dev/solr/experiment/select?q=*:*&stats=true&stats.field=data_point&stats.facet=parameter_stable_id&rows=0&indent=true&fq=phenotyping_center:HMGU&fq=parameter_stable_id:IMPC_CBC_010_001
    //http://ves-ebi-d0.ebi.ac.uk:8090/mi/impc/dev/solr/experiment/select?q=*:*&stats=true&stats.field=data_point&stats.facet=phenotyping_center&rows=0&indent=true&fq=parameter_stable_id:IMPC_CBC_010_001
    logger.debug("calling getStats for baseline");
    SolrQuery query = new SolrQuery().setQuery("*:*");
    query.setGetFieldStatistics(true);
    query.setGetFieldStatistics(ObservationDTO.DATA_POINT);
    query.setParam("stats.facet", ObservationDTO.PHENOTYPING_CENTER);
    query.setFacetLimit(-1);
    query.addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":control");
    if (parameterStableId != null) {
        query.addFilterQuery(ObservationDTO.PARAMETER_STABLE_ID + ":" + parameterStableId);
    }

    if (phenotypingCenter != null) {
        query.addFilterQuery(ObservationDTO.PHENOTYPING_CENTER + ":\"" + phenotypingCenter + "\"");
    }

    query.setRows(0);

    logger.debug("SOLR URL getPipelines " + SolrUtils.getBaseURL(experimentCore) + "/select?" + query);

    QueryResponse response = experimentCore.query(query);
    FieldStatsInfo statsInfo = response.getFieldStatsInfo().get(ObservationDTO.DATA_POINT);
    Map<String, List<FieldStatsInfo>> facetToStatsMap = statsInfo.getFacets();

    List<FieldStatsInfo> centerStatsList = null;
    //just get the first result as we only expect 1
    for (String facet : facetToStatsMap.keySet()) {
        centerStatsList = facetToStatsMap.get(facet);
    }

    return centerStatsList;

}