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

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

Introduction

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

Prototype

public SolrQuery setRows(Integer rows) 

Source Link

Usage

From source file:org.ambraproject.article.service.BrowseServiceImpl.java

License:Apache License

/**
 * Returns a list of articles for a given category
 * @param params a collection filters / parameters to browse by
 * @return articles/*from   w w  w  .j a v  a2s . c o m*/
 */
private BrowseResult getArticlesBySubjectViaSolr(BrowseParameters params) {
    BrowseResult result = new BrowseResult();
    ArrayList<SearchHit> articles = new ArrayList<SearchHit>();
    long total = 0;

    SolrQuery query = createCommonQuery(params.getJournalKey());

    query.addField("title_display");
    query.addField("author_display");
    query.addField("article_type");
    query.addField("publication_date");
    query.addField("id");
    query.addField("abstract_primary_display");
    query.addField("eissn");

    if (params.getSubjects() != null && params.getSubjects().length > 0) {
        StringBuffer subjectQuery = new StringBuffer();
        for (String subject : params.getSubjects()) {
            subjectQuery.append("\"").append(subject).append("\"").append(" AND ");
        }
        // remove the last " AND "
        query.setQuery("subject_level_1:(" + subjectQuery.substring(0, subjectQuery.length() - 5) + ")");
    }

    // we use subject_level_1 field instead of subject_facet field because
    // we are only interested in the top level subjects
    query.setFacet(true);
    query.addFacetField("subject_level_1");
    query.setFacetMinCount(1);
    query.setFacetSort("index");

    setSort(query, params);

    query.setStart(params.getPageNum() * params.getPageSize());
    query.setRows(params.getPageSize());

    try {
        QueryResponse response = this.serverFactory.getServer().query(query);
        SolrDocumentList documentList = response.getResults();
        total = documentList.getNumFound();

        for (SolrDocument document : documentList) {
            SearchHit sh = createArticleBrowseDisplay(document, query.toString());
            articles.add(sh);
        }

        result.setSubjectFacet(facetCountsToHashMap(response.getFacetField("subject_level_1")));
    } catch (SolrServerException e) {
        log.error("Unable to execute a query on the Solr Server.", e);
    }

    result.setTotal(total);
    result.setArticles(articles);

    return result;
}

From source file:org.ambraproject.article.service.BrowseServiceImpl.java

License:Apache License

/**
 * Returns list of articles in a given date range, from newest to oldest
 * @param params the collection class of parameters.
 * @return the articles// w w  w .j  ava  2 s. com
 */
private BrowseResult getArticlesByDateViaSolr(BrowseParameters params) {
    BrowseResult result = new BrowseResult();
    ArrayList<SearchHit> articles = new ArrayList<SearchHit>();
    long totalSize = 0;

    SolrQuery query = createCommonQuery(params.getJournalKey());

    query.addField("title_display");
    query.addField("author_display");
    query.addField("article_type");
    query.addField("publication_date");
    query.addField("id");
    query.addField("abstract_primary_display");
    query.addField("eissn");

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String sDate = sdf.format(params.getStartDate().getTime());
    String eDate = sdf.format(params.getEndDate().getTime());

    sDate = sDate + "T00:00:00Z";
    eDate = eDate + "T00:00:00Z";

    query.addFilterQuery("publication_date:[" + sDate + " TO " + eDate + "]");

    StringBuffer sb = new StringBuffer();
    if (params.getArticleTypes() != null && params.getArticleTypes().size() > 0) {
        for (URI uri : params.getArticleTypes()) {
            String path = uri.getPath();
            int index = path.lastIndexOf("/");
            if (index != -1) {
                String articleType = path.substring(index + 1);
                sb.append("\"").append(articleType).append("\"").append(" OR ");
            }
        }
        String articleTypesQuery = sb.substring(0, sb.length() - 4);

        if (articleTypesQuery.length() > 0) {
            query.addFilterQuery("article_type_facet:" + articleTypesQuery);
        }
    }

    setSort(query, params);

    query.setStart(params.getPageNum() * params.getPageSize());
    query.setRows(params.getPageSize());

    log.info("getArticlesByDate Solr Query:" + query.toString());

    try {
        QueryResponse response = this.serverFactory.getServer().query(query);
        SolrDocumentList documentList = response.getResults();
        totalSize = documentList.getNumFound();

        for (SolrDocument document : documentList) {
            SearchHit sh = createArticleBrowseDisplay(document, query.toString());
            articles.add(sh);
        }

    } catch (SolrServerException e) {
        log.error("Unable to execute a query on the Solr Server.", e);
    }

    result.setArticles(articles);
    result.setTotal(totalSize);

    return result;
}

From source file:org.ambraproject.search.service.SolrSearchService.java

License:Apache License

private SolrQuery createQuery(String queryString, int startPage, int pageSize, boolean useDismax) {
    SolrQuery query = new SolrQuery(queryString);
    query.setTimeAllowed(queryTimeout);/*from w  w  w.ja va2  s  .c  o  m*/
    query.setIncludeScore(true); // The relevance (of each results element) to the search terms.
    query.setHighlight(true);

    if (useDismax) {
        query.set("defType", "dismax");
    }

    //TODO: Put The "options" from the "queryField" picklist into a config file.
    //This list matches the "options" from the "queryField" picklist on unformattedSearch.ftl,
    //without the "date" fields.

    query.set("hl.fl", this.highlightFields);
    query.set("hl.requireFieldMatch", true);
    query.setStart(startPage * pageSize); // Which results element to return first in this batch.
    query.setRows(pageSize); // The number of results elements to return.
    // request only fields that we need to display
    query.setFields("id", "score", "title_display", "publication_date", "eissn", "journal", "article_type",
            "author_display");
    query.addFacetField("subject_facet");
    query.addFacetField("author_facet");
    query.addFacetField("editor_facet");
    query.addFacetField("article_type_facet");
    query.addFacetField("affiliate_facet");
    query.set("facet.method", "fc");
    query.setFacetLimit(MAX_FACET_SIZE);
    query.setFacetMinCount(MIN_FACET_COUNT);
    // Add a filter to ensure that Solr never returns partial documents
    query.addFilterQuery(createFilterFullDocuments());

    return query;
}

From source file:org.ambraproject.search.service.SolrSearchService.java

License:Apache License

private SolrQuery createJournalFacetQuery(String queryString, boolean useDismax) {
    SolrQuery query = new SolrQuery(queryString);
    query.setTimeAllowed(queryTimeout);//from  www  .  ja v a  2  s .  co m
    query.setIncludeScore(false);
    query.setHighlight(false);
    query.setRows(0);
    query.setFacetLimit(MAX_FACET_SIZE);
    query.setFacetMinCount(MIN_FACET_COUNT);

    if (useDismax) {
        query.set("defType", "dismax");
    }

    query.addFacetField("cross_published_journal_key");
    // Add a filter to ensure that Solr never returns partial documents
    query.addFilterQuery(createFilterFullDocuments());

    return query;
}

From source file:org.ambraproject.search.service.SolrSearchService.java

License:Apache License

private SolrQuery createKeywordFacetQuery(String queryString) {
    SolrQuery query = new SolrQuery();
    query.setTimeAllowed(queryTimeout);/*from   ww w.ja  va 2  s.  c  om*/
    query.setIncludeScore(false);
    query.setHighlight(false);
    query.setRows(0);
    query.set("defType", "dismax");
    query.set("qf", "doc_partial_body");
    query.addFacetField("doc_partial_type");
    query.setFacetLimit(MAX_FACET_SIZE);
    query.setFacetMinCount(MIN_FACET_COUNT);
    // Add a filter to ensure that Solr never returns partial documents
    query.addFilterQuery(createFilterPartialDocuments());
    query.setQuery(queryString);

    return query;
}

From source file:org.ambraproject.service.article.BrowseServiceImpl.java

License:Apache License

/**
 * Returns list of articles in a given date range, from newest to oldest
 * @param params the collection class of parameters.
 * @return the articles/*from   w  w w .j av a 2 s  .  co m*/
 */
private BrowseResult getArticlesByDateViaSolr(BrowseParameters params) {
    BrowseResult result = new BrowseResult();
    ArrayList<SearchHit> articles = new ArrayList<SearchHit>();
    long totalSize = 0;

    SolrQuery query = createCommonQuery(params.getJournalKey());

    query.addField("title_display");
    query.addField("author_display");
    query.addField("article_type");
    query.addField("publication_date");
    query.addField("id");
    query.addField("abstract_primary_display");
    query.addField("eissn");
    query.addField("striking_image");

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String sDate = sdf.format(params.getStartDate().getTime());
    String eDate = sdf.format(params.getEndDate().getTime());

    sDate = sDate + "T00:00:00Z";
    eDate = eDate + "T00:00:00Z";

    query.addFilterQuery("publication_date:[" + sDate + " TO " + eDate + "]");

    StringBuffer sb = new StringBuffer();
    if (params.getArticleTypes() != null && params.getArticleTypes().size() > 0) {
        for (URI uri : params.getArticleTypes()) {
            String path = uri.getPath();
            int index = path.lastIndexOf("/");
            if (index != -1) {
                String articleType = path.substring(index + 1);
                sb.append("\"").append(articleType).append("\"").append(" OR ");
            }
        }
        String articleTypesQuery = sb.substring(0, sb.length() - 4);

        if (articleTypesQuery.length() > 0) {
            query.addFilterQuery("article_type_facet:" + articleTypesQuery);
        }
    }

    setSort(query, params);

    query.setStart(params.getPageNum() * params.getPageSize());
    query.setRows(params.getPageSize());

    log.info("getArticlesByDate Solr Query:" + query.toString());

    try {
        QueryResponse response = this.serverFactory.getServer().query(query);
        SolrDocumentList documentList = response.getResults();
        totalSize = documentList.getNumFound();

        for (SolrDocument document : documentList) {
            SearchHit sh = createArticleBrowseDisplay(document, query.toString());
            articles.add(sh);
        }

    } catch (SolrServerException e) {
        log.error("Unable to execute a query on the Solr Server.", e);
    }

    result.setArticles(articles);
    result.setTotal(totalSize);

    return result;
}

From source file:org.ambraproject.service.search.SolrSearchService.java

License:Apache License

/**
 * Executes a search where results are grouped by one of the subject facets in the solr schema.
 *
 * @param facetName the subject facet of interest.  Depending on the application, this should be
 *     either "subject_facet" or "subject_hierarchy".  The first does not include the entire taxonomy
 *     path, while the second does.//www .  j  av  a2  s  . co  m
 * @param journal journal of interest
 * @return solr server response
 * @throws ApplicationException
 */
private QueryResponse executeSubjectFacetSearch(String facetName, String journal) throws ApplicationException {
    SolrQuery query = createQuery("*:*", 0, 0, false);

    // We don't care about results, just facet counts.
    query.setRows(0);

    // We only care about full documents
    query.addFilterQuery(createFilterFullDocuments());
    query.addFilterQuery(createFilterNoIssueImageDocuments());

    // Remove facets we don't use in this case.
    query.removeFacetField("author_facet");
    query.removeFacetField("editor_facet");
    query.removeFacetField("affiliate_facet");
    query.removeFacetField("subject_facet");
    query.removeFacetField("subject_hierarchy");

    // Add the one we do want.
    query.addFacetField(facetName);

    if (journal != null && journal.length() > 0) {
        query.addFilterQuery("cross_published_journal_key:" + journal);
    }

    query.setFacetLimit(-1); // unlimited
    return getSOLRResponse(query);
}

From source file:org.ambraproject.service.search.SolrSearchService.java

License:Apache License

private SortedMap<String, Long> getTopSubjectsFromSOLR() throws ApplicationException {
    SolrQuery query = createQuery("*:*", 0, 0, false);

    // We don't care about results, just facet counts.
    query.setRows(0);

    // We only care about full documents
    query.addFilterQuery(createFilterFullDocuments());

    // Remove facets we don't use in this case.
    query.removeFacetField("author_facet");
    query.removeFacetField("editor_facet");
    query.removeFacetField("affiliate_facet");
    query.removeFacetField("subject_facet");

    // Add the one we do want.
    query.addFacetField("subject_level_1");
    query.setFacetLimit(-1); // unlimited

    QueryResponse queryResponse = getSOLRResponse(query);
    FacetField facet = queryResponse.getFacetField("subject_level_1");

    SortedMap<String, Long> results = new TreeMap<String, Long>();

    //If there is no facet.  Should never happen outside a unit test
    if (facet.getValues() == null) {
        log.warn("No subject_level_1 facet");
    } else {//from   w ww.j ava2  s  . c o  m
        for (FacetField.Count count : facet.getValues()) {
            results.put(count.getName(), count.getCount());
        }
    }

    return results;
}

From source file:org.ambraproject.service.search.SolrSearchService.java

License:Apache License

private SolrQuery createQuery(String queryString, int startPage, int pageSize, boolean useDismax) {
    SolrQuery query = new SolrQuery(queryString);
    query.setTimeAllowed(queryTimeout);//ww  w  .  ja v a 2s .co m
    query.setIncludeScore(true); // The relevance (of each results element) to the search terms.
    query.setHighlight(false);

    if (useDismax) {
        query.set("defType", "dismax");
    }

    //TODO: Put The "options" from the "queryField" picklist into a config file.
    //This list matches the "options" from the "queryField" picklist on unformattedSearch.ftl,
    //without the "date" fields.

    query.setStart(startPage * pageSize); // Which results element to return first in this batch.
    query.setRows(pageSize); // The number of results elements to return.
    // request only fields that we need to display
    query.setFields("id", "score", "title_display", "publication_date", "eissn", "journal", "article_type",
            "author_display", "abstract", "abstract_primary_display", "striking_image", "figure_table_caption",
            "subject", "expression_of_concern", "retraction");
    query.addFacetField("subject_facet");
    query.addFacetField("author_facet");
    query.addFacetField("editor_facet");
    query.addFacetField("article_type_facet");
    query.addFacetField("affiliate_facet");
    query.set("facet.method", "fc");
    query.setFacetLimit(MAX_FACET_SIZE);
    query.setFacetMinCount(MIN_FACET_COUNT);
    // Add a filter to ensure that Solr never returns partial documents
    query.addFilterQuery(createFilterFullDocuments());

    return query;
}

From source file:org.ambraproject.service.search.SolrSearchService.java

License:Apache License

private SolrQuery createFacetsQuery(String queryString, String field, boolean useDismax) {
    SolrQuery query = new SolrQuery(queryString);
    query.setTimeAllowed(queryTimeout);/*from   w ww.j  a  va  2s  . c  om*/
    query.setIncludeScore(false);
    query.setHighlight(false);
    query.setRows(0);
    query.setFacetLimit(MAX_FACET_SIZE);
    query.setFacetMinCount(MIN_FACET_COUNT);

    if (useDismax) {
        query.set("defType", "dismax");
    }

    query.addFacetField(field);
    // Add a filter to ensure that Solr never returns partial documents
    query.addFilterQuery(createFilterFullDocuments());

    return query;
}