Example usage for org.apache.solr.client.solrj SolrQuery addFacetField

List of usage examples for org.apache.solr.client.solrj SolrQuery addFacetField

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery addFacetField.

Prototype

public SolrQuery addFacetField(String... fields) 

Source Link

Document

Add field(s) for facet computation.

Usage

From source file:ru.org.linux.search.SearchViewer.java

License:Apache License

public QueryResponse performSearch(SolrServer search) throws SolrServerException {
    SolrQuery params = new SolrQuery();
    // set search query params
    params.set("q", query.getQ());
    params.set("rows", SEARCH_ROWS);
    params.set("start", query.getOffset());

    params.set("qt", "edismax");

    if (query.getRange().getParam() != null) {
        params.add("fq", query.getRange().getParam());
    }//ww  w  . ja v  a 2  s .  c om

    if (query.getInterval().getRange() != null) {
        params.add("fq", query.getInterval().getRange());
    }

    params.setFacetMinCount(1);
    params.setFacet(true);

    String section = query.getSection();

    if (section != null && !section.isEmpty() && !"0".equals(section)) {
        params.add("fq", "{!tag=dt}section:" + query.getSection());
        params.addFacetField("{!ex=dt}section");

        params.addFacetField("{!ex=dt}group_id");
    } else {
        params.addFacetField("section");
        params.addFacetField("group_id");
    }

    if (query.getUser() != null) {
        User user = query.getUser();

        if (query.isUsertopic()) {
            params.add("fq", "topic_user_id:" + user.getId());
        } else {
            params.add("fq", "user_id:" + user.getId());
        }
    }

    if (query.getGroup() != 0) {
        params.add("fq", "{!tag=dt}group_id:" + query.getGroup());
    }

    params.set("sort", query.getSort().getParam());

    return search.query(params);
}

From source file:uk.ac.ebi.atlas.solr.query.builders.FacetedPropertyValueQueryBuilder.java

License:Apache License

private SolrQuery buildQueryObject(String queryString) {
    SolrQuery solrQuery = new SolrQuery(queryString);

    solrQuery.addFacetField(PROPERTY_LOWER_FIELD);
    solrQuery.setRows(0);/*from   w w  w  . jav a2  s .c o m*/
    solrQuery.setFacet(true);
    solrQuery.setFacetLimit(DEFAULT_LIMIT);
    solrQuery.setFacetMinCount(1);

    return solrQuery;
}

From source file:uk.ac.ebi.atlas.solr.query.SpeciesLookupService.java

License:Apache License

public Result fetchSpeciesForGeneSet(String term) {
    // eg: property_value_lower:"IPR027417"
    String queryText = PROPERTY_LOWER_FIELD + ":" + encloseInQuotes(term)
            + " AND property_name:(pathwayid OR go OR po OR interpro OR REACT_303889)"; // Needed to exclude Entrez numerical ids, identical to Plant Reactome ids (pathwayid)
    LOGGER.debug("fetch species for geneset " + queryText);

    SolrQuery query = new SolrQuery(queryText);

    query.addFacetField(SPECIES_FIELD);
    query.setRows(0);/*  ww  w.j  a  va 2  s  .  co  m*/
    query.setFacet(true);

    // just get first 2 species for performance reasons, we only need to know if multi-species exist, not what they are
    query.setFacetLimit(2);
    query.setFacetMinCount(1);

    QueryResponse solrResponse = solrServer.query(query);
    ImmutableSet<String> species = SolrUtil.extractFirstFacetValues(solrResponse);

    return new Result(species);
}

From source file:uk.ac.ebi.intact.dataexchange.psimi.solr.IntactSolrSearcher.java

License:Apache License

public Multimap<String, InteractorIdCount> searchInteractors(SolrQuery originalQuery,
        IntactFacetField[] intactFacetFields) throws IntactSolrException {
    SolrQuery query = originalQuery.getCopy();
    query.setRows(0);//  w w  w.  ja  v  a 2s. co  m

    // we allow faceting
    query.setFacet(true);

    // we want all the facet fields with min count = 1. The facet fields with count = 0 are not interesting
    query.setFacetMinCount(1);

    Multimap<String, InteractorIdCount> interactors = HashMultimap.create();

    if (intactFacetFields != null) {

        // we sort the results : the biggest count first
        query.setFacetSort(FacetParams.FACET_SORT_COUNT);

        for (IntactFacetField facetField : intactFacetFields) {
            final String fieldName = createFieldName(facetField.getFieldName());

            // important optimization. We don't want to return all the fields, only a certain number for pagination
            if (facetField.getFirst() != null) {
                query.set("f." + fieldName + ".facet.offset", facetField.getFirst());
            }
            if (facetField.getMax() != null) {
                query.set("f." + fieldName + ".facet.limit", facetField.getMax());
            }

            query.addFacetField(fieldName);
        }
    }

    QueryResponse queryResponse = executeQuery(query);

    List<FacetField> facetFields = queryResponse.getFacetFields();

    if (facetFields == null || facetFields.isEmpty()) {
        return interactors;
    }

    for (FacetField ff : facetFields) {
        if (ff != null && ff.getValues() != null) {
            for (FacetField.Count c : ff.getValues()) {
                interactors.put(extractInteractorTypeFromFieldName(ff.getName()),
                        new InteractorIdCount(c.getName(), c.getCount()));
            }
        }
    }

    return interactors;
}

From source file:uk.ac.ebi.intact.dataexchange.psimi.solr.IntactSolrSearcher.java

License:Apache License

public Map<String, Integer> countAllInteractors(SolrQuery originalQuery, String[] interactorTypeMis)
        throws IntactSolrException {
    boolean endOfFacetResults = false;

    int firstResults = 0;

    Map<String, Integer> results = new HashMap<String, Integer>();

    while (!endOfFacetResults) {
        int chunkResults = 0;

        SolrQuery query = originalQuery.getCopy();
        query.setRows(0);/*from  ww w . j  av a2s. c om*/

        // we allow faceting
        query.setFacet(true);

        // we want all the facet fields with min count = 1. The facet fields with count = 0 are not interesting
        query.setFacetMinCount(1);

        // important optimization. We don't want to return all the fields, only a certain number for pagination
        query.set(FacetParams.FACET_OFFSET, firstResults);
        query.setFacetLimit(CHUNK_FACET_THRESHOLD);

        // we sort the results : the biggest count first
        query.setFacetSort(FacetParams.FACET_SORT_COUNT);

        for (String mi : interactorTypeMis) {
            final String fieldName = createFieldName(mi);

            query.addFacetField(fieldName);
        }

        QueryResponse queryResponse = executeQuery(query);

        List<FacetField> facetFields = queryResponse.getFacetFields();
        if (facetFields == null || facetFields.isEmpty()) {
            endOfFacetResults = true;
        } else {
            for (FacetField facetField : facetFields) {
                if (facetField.getValueCount() > 0) {
                    chunkResults += facetField.getValueCount();

                    if (results.containsKey(facetField.getName())) {
                        int current = results.get(facetField.getName());
                        results.put(facetField.getName(), current + facetField.getValueCount());
                    } else {
                        results.put(facetField.getName(), facetField.getValueCount());
                    }
                } else if (!results.containsKey(facetField.getName())) {
                    results.put(facetField.getName(), 0);
                }
            }

            if (chunkResults < CHUNK_FACET_THRESHOLD) {
                endOfFacetResults = true;
            }
        }

        firstResults += CHUNK_FACET_THRESHOLD;
    }

    return results;
}

From source file:uk.ac.ebi.phenotype.imaging.springrest.images.dao.ImagesSolrJ.java

License:Apache License

private QueryResponse runFacetQuery(String query, String facetField, int start, int length, String filterQuery)
        throws SolrServerException {

    SolrQuery solrQuery = new SolrQuery();
    //   System.out.println("facet solr query=" + query);
    solrQuery.setQuery(query);//from   w  w  w.j av  a 2s .  c om
    solrQuery.setStart(start);
    solrQuery.setRows(length);
    solrQuery.setFacet(true);
    solrQuery.setFacetMinCount(1);
    solrQuery.addFacetField(facetField);
    if (filterQuery != "") {
        solrQuery.addFilterQuery(filterQuery);
    }
    //   System.out.println("exp facet query="+solrQuery.toString());
    return server.query(solrQuery);
}

From source file:uk.ac.ebi.phenotype.service.GeneService.java

License:Apache License

/**
 * /*from   w  w  w .  ja v  a  2 s  .com*/
 * @param geneIds
 * @return Number of genes (from the provided list) in each status of interest.
 */
public HashMap<String, Long> getStatusCount(Set<String> geneIds) {

    HashMap<String, Long> res = new HashMap<>();

    // build query for these genes
    String geneQuery = GeneDTO.MGI_ACCESSION_ID + ":(" + StringUtils.join(geneIds, " OR ").replace(":", "\\:")
            + ")";
    System.out.println("geneQuery: " + geneQuery);
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(geneQuery).setRows(1).setFacet(true);
    QueryResponse solrResponse;
    try {
        // add facet for latest_project_status 
        solrQuery.addFacetField(GeneDTO.LATEST_ES_CELL_STATUS);
        System.out.println("---- " + solr.getBaseURL() + "/select?" + solrQuery);
        solrResponse = solr.query(solrQuery);
        // put all values in the hash
        for (Count c : solrResponse.getFacetField(GeneDTO.LATEST_ES_CELL_STATUS).getValues()) {
            res.put(c.getName(), c.getCount());
        }

        // add facet latest_es_cell_status
        solrQuery.removeFacetField(GeneDTO.LATEST_ES_CELL_STATUS);
        solrResponse = solr.query(solrQuery.addFacetField(GeneDTO.LATEST_PROJECT_STATUS));
        // put all values in the hash
        for (Count c : solrResponse.getFacetField(GeneDTO.LATEST_PROJECT_STATUS).getValues()) {
            res.put(c.getName(), c.getCount());
        }
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

    return res;
}

From source file:uk.ac.ebi.phenotype.service.MpService.java

License:Apache License

public Set<BasicBean> getAllTopLevelPhenotypesAsBasicBeans() throws SolrServerException {

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.addFacetField("top_level_mp_term_id");
    solrQuery.setRows(0);/*  ww  w  .j  a  v  a2 s.  c  o  m*/
    QueryResponse rsp = solr.query(solrQuery);
    System.out.println("solr query in basicbean=" + solrQuery);
    SolrDocumentList res = rsp.getResults();

    HashSet<BasicBean> allTopLevelPhenotypes = new LinkedHashSet<BasicBean>();
    for (FacetField ff : rsp.getFacetFields()) {
        for (Count count : ff.getValues()) {
            String mpArray[] = count.getName().split("___");
            BasicBean bean = new BasicBean();
            bean.setName(mpArray[0]);
            bean.setId(mpArray[1]);
            allTopLevelPhenotypes.add(bean);
        }

    }
    return allTopLevelPhenotypes;
}

From source file:uk.ac.ebi.phenotype.service.ObservationService.java

License:Apache License

public Set<String> getAllGeneIdsByResource(List<String> resourceName, boolean experimentalOnly) {

    SolrQuery q = new SolrQuery();
    q.setFacet(true);/*from  w  ww . j  ava 2 s . c  o m*/
    q.setFacetMinCount(1);
    q.setFacetLimit(-1);
    q.setRows(0);
    q.addFacetField(ObservationDTO.GENE_ACCESSION_ID);
    if (resourceName != null) {
        q.setQuery(ObservationDTO.DATASOURCE_NAME + ":"
                + StringUtils.join(resourceName, " OR " + ObservationDTO.DATASOURCE_NAME + ":"));
    } else {
        q.setQuery("*:*");
    }

    if (experimentalOnly) {
        q.addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":experimental");
    }

    LOG.info("Solr URL getAllGeneIdsByResource " + solr.getBaseURL() + "/select?" + q);
    try {
        return getFacets(solr.query(q)).get(ObservationDTO.GENE_ACCESSION_ID).keySet();
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

    return null;
}

From source file:uk.ac.ebi.phenotype.service.ObservationService.java

License:Apache License

public Set<String> getAllColonyIdsByResource(List<String> resourceName, boolean experimentalOnly) {

    SolrQuery q = new SolrQuery();
    q.setFacet(true);//  w  w w  .jav a 2s  .co m
    q.setFacetMinCount(1);
    q.setFacetLimit(-1);
    q.setRows(0);
    q.addFacetField(ObservationDTO.COLONY_ID);

    if (resourceName != null) {
        q.setQuery(ObservationDTO.DATASOURCE_NAME + ":"
                + StringUtils.join(resourceName, " OR " + ObservationDTO.DATASOURCE_NAME + ":"));
    } else {
        q.setQuery("*:*");
    }

    if (experimentalOnly) {
        q.addFilterQuery(ObservationDTO.BIOLOGICAL_SAMPLE_GROUP + ":experimental");
    }

    LOG.info("Solr URL getAllColonyIdsByResource " + solr.getBaseURL() + "/select?" + q);
    try {
        return getFacets(solr.query(q)).get(ObservationDTO.COLONY_ID).keySet();
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

    return null;
}