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

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

Introduction

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

Prototype

public SolrQuery setStart(Integer start) 

Source Link

Usage

From source file:org.dspace.app.cris.network.AVisualizationGraphModeOne.java

@Override
public List<VisualizationGraphNode> load(List<String[]> discardedNode, Integer importedNodes,
        Boolean otherError) throws Exception {
    // load all publications
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery("*:*");

    solrQuery.setFields("search.resourceid", "search.resourcetype", "author_filter", "dc.title", "handle");
    solrQuery.addFilterQuery("search.resourcetype:[2 TO 4]");

    int start = 0;
    int offset = 100;
    if (NOT_PAGINATION) {
        solrQuery.setRows(Integer.MAX_VALUE);
    } else {//  www  .j a v  a 2 s .c  om
        solrQuery.setStart(start);
        solrQuery.setRows(offset);
    }
    QueryResponse rsp = getService().getSearcher().search(solrQuery);
    SolrDocumentList publications = rsp.getResults();
    System.out.println(publications.getNumFound());
    List<VisualizationGraphNode> result = null;
    boolean endwhile = false;
    while (((publications.getNumFound() + offset) > start) && endwhile == false) {
        if (start > 0 && !NOT_PAGINATION) {
            solrQuery.setStart(start);
            solrQuery.setRows(offset);
            rsp = getService().getSearcher().search(solrQuery);
            publications = rsp.getResults();
        }

        start = (start + 1) + offset;
        // for each publication get authority's authors facets
        Iterator<SolrDocument> iter = publications.iterator();
        int counter = 0;
        external: while (iter.hasNext()) {

            counter++;
            log.debug("" + (start == 0 ? counter : (start + counter)) + " of " + publications.getNumFound());
            System.out.println(getConnectionName() + " - " + counter);

            result = new ArrayList<VisualizationGraphNode>();

            Integer pubId = null;
            try {
                SolrDocument publication = iter.next();

                pubId = (Integer) publication.getFieldValue("search.resourceid");
                Object obj = publication.getFieldValue("dc.title");
                String handle = (String) publication.getFieldValue("handle");
                Object auth = publication.getFieldValue("author_filter");

                List<String> values = new ArrayList<String>();
                if (obj instanceof ArrayList) {
                    for (String aaa : (List<String>) obj) {
                        values.add(aaa);
                    }
                } else {
                    String value = (String) obj;
                    values.add(value);
                }

                if (auth instanceof ArrayList) {
                    int i = 0;
                    List<String> authArrays = (List<String>) auth;
                    for (String aaa : authArrays) {

                        String[] split = aaa.split("\\|\\|\\|");

                        String a = aaa;
                        String a_authority = null;
                        String a_dept = null;
                        String a_displayValue = "";

                        if (split.length > 1) {

                            String[] splitAuthority = split[1].split(splitterAuthority);

                            a_displayValue = splitAuthority[0];
                            if (splitAuthority.length > 1) {
                                a_authority = splitAuthority[1];
                                // a_dept = ResearcherPageUtils
                                // .getDepartment(a_authority);
                                a_dept = getDepartmentFromSOLR(a_authority);
                            }

                        }

                        for (int j = i; j < authArrays.size(); j++) {
                            String bbb = authArrays.get(j);
                            String extra = handle;

                            split = bbb.split("\\|\\|\\|");

                            String b = bbb;
                            String b_authority = null;
                            String b_dept = null;
                            String b_displayValue = "";

                            if (split.length > 1) {

                                String[] splitAuthority = split[1].split(splitterAuthority);

                                b_displayValue = splitAuthority[0];
                                if (splitAuthority.length > 1) {
                                    b_authority = splitAuthority[1];
                                    // a_dept = ResearcherPageUtils
                                    // .getDepartment(a_authority);
                                    b_dept = getDepartmentFromSOLR(b_authority);
                                }

                            }

                            if (j == i) {
                                buildRow(result, a, a_authority, a_displayValue, b, b_authority, b_displayValue,
                                        values, extra, a_dept, b_dept, ConstantNetwork.ENTITY_PLACEHOLDER_RP);
                            } else {
                                buildRow(result, a, a_authority, a_displayValue, b, b_authority, b_displayValue,
                                        values, extra, a_dept, b_dept, ConstantNetwork.ENTITY_RP);
                            }
                        }
                        i++;
                    }
                } else {
                    continue external;
                }

            } catch (Exception e) {
                log.error("Error try to build object to index with publication ID:" + pubId);
                log.error(e.getMessage(), e);
                otherError = true;
                continue;
            }

            importedNodes = indexNode(discardedNode, importedNodes, result);

        }
        if (NOT_PAGINATION) {
            endwhile = true;
        }

        log.debug("commit " + getType());
        getIndexer().commit();
    }
    return result;
}

From source file:org.dspace.app.cris.network.AVisualizationGraphModeThree.java

@Override
public List<VisualizationGraphNode> load(List<String[]> discardedNode, Integer importedNodes,
        Boolean otherError) throws Exception {
    // load all publications
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(getQuery());//  w w  w .  j a  va2 s.  co m

    solrQuery.setFields(getFields());
    solrQuery.addFilterQuery("search.resourcetype:" + getResourceType());

    int start = 0;
    int offset = 100;
    if (NOT_PAGINATION) {
        solrQuery.setRows(Integer.MAX_VALUE);
    } else {
        solrQuery.setStart(start);
        solrQuery.setRows(offset);
    }
    QueryResponse rsp = getService().getSearcher().search(solrQuery);
    SolrDocumentList publications = rsp.getResults();
    System.out.println(publications.getNumFound());
    List<VisualizationGraphNode> result = null;
    boolean endwhile = false;
    while (((publications.getNumFound() + offset) > start) && endwhile == false) {
        if (start > 0 && !NOT_PAGINATION) {
            solrQuery.setStart(start);
            solrQuery.setRows(offset);
            rsp = getService().getSearcher().search(solrQuery);
            publications = rsp.getResults();
        }

        start = (start + 1) + offset;
        // for each publication get authority's authors facets
        Iterator<SolrDocument> iter = publications.iterator();
        int counter = 0;
        external: while (iter.hasNext()) {

            counter++;
            log.debug("" + (start == 0 ? counter : (start + counter)) + " of " + publications.getNumFound());
            System.out.println(getConnectionName() + " - " + counter);

            result = new ArrayList<VisualizationGraphNode>();

            Integer pubId = null;
            try {
                SolrDocument publication = iter.next();

                pubId = (Integer) publication.getFieldValue("search.resourceid");

                Object obj = publication.getFieldValue(getNameFieldValueInFields());
                String handle = (String) publication.getFirstValue(getNameFieldExtraInFields());

                Object auth = publication.getFieldValue(getNameFieldNodeBuilderInFields());

                List<String> values = new ArrayList<String>();
                if (obj instanceof ArrayList) {
                    for (String aaa : (List<String>) obj) {
                        values.add(aaa);
                    }
                } else {
                    String value = (String) obj;
                    values.add(value);
                }

                if (auth instanceof ArrayList) {
                    int i = 0;
                    List<String> authArrays = (List<String>) auth;
                    for (String aaa : authArrays) {

                        String[] split = aaa.split("\\|\\|\\|");

                        String a = aaa;
                        String a_authority = null;
                        String a_dept = null;
                        String a_displayValue = "";

                        if (split.length > 1) {

                            String[] splitAuthority = split[1].split(splitterAuthority);

                            a_displayValue = splitAuthority[0];
                            if (split.length > 1) {
                                a_authority = splitAuthority[1];
                                // a_dept = ResearcherPageUtils
                                // .getDepartment(a_authority);
                                a_dept = getDepartmentFromSOLR(a_authority);
                            }

                        }
                        for (int j = i; j < authArrays.size(); j++) {
                            String bbb = authArrays.get(j);
                            String extra = handle;

                            split = bbb.split("\\|\\|\\|");

                            String b = bbb;
                            String b_authority = null;
                            String b_dept = null;
                            String b_displayValue = "";

                            if (split.length > 1) {

                                String[] splitAuthority = split[1].split(splitterAuthority);

                                b_displayValue = splitAuthority[0];
                                if (split.length > 1) {
                                    b_authority = splitAuthority[1];
                                    // a_dept = ResearcherPageUtils
                                    // .getDepartment(a_authority);
                                    b_dept = getDepartmentFromSOLR(a_authority);
                                }

                            }

                            if (j == i) {
                                buildRow(result, a, a_authority, a_displayValue, b, b_authority, b_displayValue,
                                        values, extra, a_dept, b_dept, ConstantNetwork.ENTITY_PLACEHOLDER_RP);
                            } else {
                                buildRow(result, a, a_authority, a_displayValue, b, b_authority, b_displayValue,
                                        values, extra, a_dept, b_dept, ConstantNetwork.ENTITY_RP);
                            }
                        }
                        i++;
                    }
                } else {
                    continue external;
                }

            } catch (Exception e) {
                log.error("Error try to build object to index with publication ID:" + pubId);
                log.error(e.getMessage(), e);
                otherError = true;
                continue;
            }

            importedNodes = indexNode(discardedNode, importedNodes, result);

        }
        if (NOT_PAGINATION) {
            endwhile = true;
        }

        log.debug("commit " + getType());
        getIndexer().commit();
    }
    return result;
}

From source file:org.dspace.app.cris.ws.AWSServices.java

private SolrQuery buildQuery(String query, String start, String limit, User userWS, String type,
        String... projection) {/*from   ww  w  .ja  va  2  s  .c o m*/

    SolrQuery solrQuery = new SolrQuery();
    int resource_type = getSupportedType();

    solrQuery.setQuery(query);
    solrQuery.setStart(Integer.parseInt(start));
    solrQuery.setRows(Integer.parseInt(limit));

    internalBuildFieldList(solrQuery, projection);

    solrQuery.addFilterQuery("search.resourcetype:" + resource_type);
    for (Criteria criteria : userWS.getCriteria()) {
        if (type.equals(criteria.getCriteria())) {
            // parse criteria follow solr form:
            // "fq=type:bllababl&fq=text:balglballlbab"
            List<String> result = new ArrayList<String>();
            if (criteria.getFilter() != null && !criteria.getFilter().isEmpty()) {
                // Split
                String[] fqs = criteria.getFilter().split("&");
                for (String fq : fqs) {
                    // remove prefix
                    String newfq = fq.replaceFirst("fq=", "");
                    result.add(newfq); // add to tmp list
                }
                // add fq
                solrQuery.addFilterQuery(result.toArray(new String[result.size()]));
            }
        }
    }
    return solrQuery;
}

From source file:org.dspace.app.webui.cris.servlet.DeptNetworkServlet.java

private QueryResponse shootQuery(String query, boolean facet, String facetField) throws SearchServiceException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(query);//  www.j a va  2  s.  c o  m
    solrQuery.setStart(0);
    solrQuery.setRows(0);

    if (facet) {
        solrQuery.setFacet(true);
        solrQuery.setFacetMinCount(1);
        solrQuery.addFacetField(facetField);
    }
    QueryResponse rsp = service.search(solrQuery);
    return rsp;
}

From source file:org.dspace.app.webui.cris.servlet.ResearcherNetworkServlet.java

private boolean checkAvailableData(HttpServletRequest request, String connection, String authority)
        throws SearchServiceException {

    String query = "type:" + connection + " AND focus_auth:" + authority + " AND entity:"
            + ConstantNetwork.ENTITY_RP;

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(query);/*from   w w  w  .j  av  a  2s  . c o m*/
    solrQuery.setStart(0);
    solrQuery.setRows(0);
    QueryResponse rsp = getService().search(solrQuery);
    SolrDocumentList docs = rsp.getResults();
    if (docs != null) {
        if (docs.getNumFound() > 0) {
            return true;
        }
    }
    return false;
}

From source file:org.dspace.app.webui.cris.util.RelationPreferenceUtil.java

public RelatedObjects getRelatedObject(Context context, ACrisObject cris, String relationType, String userQuery,
        String status, List<Sort> sorts, int rpp, int offset) throws SearchServiceException, SQLException {
    String uuid = cris.getUuid();
    String configurationName = preferenceService.getConfigurationName(cris, relationType);
    RelationPreferenceConfiguration configuration = preferenceService.getConfigurationService()
            .getRelationPreferenceConfiguration(configurationName);
    List<ColumnVisualizationConfiguration> columns = configuration.getColumnsVisualizationConfiguration();
    RelatedObjects result = new RelatedObjects();
    List<RelatedObject> related = result.getObjects();

    String query = MessageFormat.format(configuration.getRelationConfiguration().getQuery(), cris.getCrisID(),
            cris.getUuid());//from w  w w.  j ava2 s.c o  m

    boolean sysAdmin = AuthorizeManager.isAdmin(context);

    SolrQuery solrQuery = new SolrQuery();
    if (StringUtils.isNotEmpty(userQuery)) {
        solrQuery.addFilterQuery("{!tag=user}" + ClientUtils.escapeQueryChars(userQuery) + "*");
        solrQuery.addFacetQuery("{!ex=user}*:*");
    }

    if (!configuration.isActionEnabled(RelationPreference.HIDED, sysAdmin)) {
        solrQuery.addFilterQuery(getHiddenFilter(cris, configurationName));
    }
    if (!configuration.isActionEnabled(RelationPreference.SELECTED, sysAdmin)) {
        solrQuery.addFilterQuery(getSelectedFilter(cris, configurationName));
    }
    if (configuration.isActionEnabled(RelationPreference.UNLINKED, sysAdmin)) {
        query = getUnlinkedFilter(cris, configurationName, query);
    }

    solrQuery.setQuery(query);

    if (StringUtils.isNotEmpty(status)) {

        solrQuery.addFilterQuery(RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "."
                + status.toLowerCase() + ":\"" + cris.getUuid() + "\"");

    }

    if (sorts != null) {
        for (Sort s : sorts) {
            if (s.col < 0) {
                solrQuery.addSortField("cris-uuid", s.asc ? ORDER.asc : ORDER.desc);
                solrQuery.addSortField("search.resourceid", s.asc ? ORDER.asc : ORDER.desc);
            } else {
                solrQuery.addSortField(columns.get(s.col).getSortField(), s.asc ? ORDER.asc : ORDER.desc);
            }
        }
    }

    solrQuery.setRows(rpp);
    solrQuery.setStart(offset);
    solrQuery.setFields("search.resourceid", "cris-uuid",
            RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "."
                    + RelationPreference.UNLINKED,
            RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "." + RelationPreference.HIDED,
            RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "."
                    + RelationPreference.SELECTED);
    QueryResponse qRes = searcher.search(solrQuery);
    result.setFilterRecords((int) qRes.getResults().getNumFound());
    if (StringUtils.isNotEmpty(userQuery)) {
        result.setTotalRecords(qRes.getFacetQuery().get("{!ex=user}*:*"));
    } else {
        result.setTotalRecords((int) qRes.getResults().getNumFound());
    }
    List<Object[]> dsoList = new ArrayList<Object[]>();
    for (SolrDocument doc : qRes.getResults()) {
        List<String> unlinked = (List<String>) doc.getFieldValue(RelationPreference.PREFIX_RELATIONPREFERENCES
                + configurationName + "." + RelationPreference.UNLINKED);
        List<String> hided = (List<String>) doc.getFieldValue(RelationPreference.PREFIX_RELATIONPREFERENCES
                + configurationName + "." + RelationPreference.HIDED);
        List<String> selected = (List<String>) doc.getFieldValue(RelationPreference.PREFIX_RELATIONPREFERENCES
                + configurationName + "." + RelationPreference.SELECTED);
        String relStatus = null;
        if (unlinked != null && unlinked.contains(uuid)) {
            relStatus = RelationPreference.UNLINKED;
        } else if (hided != null && hided.contains(uuid)) {
            relStatus = RelationPreference.HIDED;
        } else if (selected != null && selected.contains(uuid)) {
            relStatus = RelationPreference.SELECTED;
        }
        if (doc.getFieldValue("cris-uuid") == null) {
            try {
                dsoList.add(new Object[] { Item.find(context, (Integer) doc.getFieldValue("search.resourceid")),
                        relStatus });
            } catch (SQLException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
        } else {
            dsoList.add(new Object[] {
                    applicationService.getEntityByUUID((String) doc.getFieldValue("cris-uuid")), relStatus });
        }
    }
    for (Object[] dso : dsoList) {
        related.add(convert(context, (DSpaceObject) dso[0], configuration, (String) dso[1]));
    }
    return result;
}

From source file:org.dspace.discovery.SolrServiceImpl.java

License:BSD License

protected SolrQuery resolveToSolrQuery(Context context, DiscoverQuery discoveryQuery,
        boolean includeUnDiscoverable) {
    SolrQuery solrQuery = new SolrQuery();

    String query = "*:*";
    if (discoveryQuery.getQuery() != null) {
        query = discoveryQuery.getQuery();
    }//from   w w  w  .j a  va  2s.  co m

    solrQuery.setQuery(query);
    if (discoveryQuery.isSpellCheck()) {
        solrQuery.setParam(SpellingParams.SPELLCHECK_Q, query);
        solrQuery.setParam(SpellingParams.SPELLCHECK_COLLATE, Boolean.TRUE);
        solrQuery.setParam("spellcheck", Boolean.TRUE);
    }

    if (!includeUnDiscoverable) {
        solrQuery.addFilterQuery("NOT(withdrawn:true)");
        solrQuery.addFilterQuery("NOT(discoverable:false)");
    }

    for (int i = 0; i < discoveryQuery.getFilterQueries().size(); i++) {
        String filterQuery = discoveryQuery.getFilterQueries().get(i);
        solrQuery.addFilterQuery(filterQuery);
    }
    if (discoveryQuery.getDSpaceObjectFilter() != -1) {
        solrQuery.addFilterQuery("search.resourcetype:" + discoveryQuery.getDSpaceObjectFilter());
    }

    for (int i = 0; i < discoveryQuery.getFieldPresentQueries().size(); i++) {
        String filterQuery = discoveryQuery.getFieldPresentQueries().get(i);
        solrQuery.addFilterQuery(filterQuery + ":[* TO *]");
    }

    if (discoveryQuery.getStart() != -1) {
        solrQuery.setStart(discoveryQuery.getStart());
    }

    if (discoveryQuery.getMaxResults() != -1) {
        solrQuery.setRows(discoveryQuery.getMaxResults());
    }

    if (discoveryQuery.getSortField() != null) {
        SolrQuery.ORDER order = SolrQuery.ORDER.asc;
        if (discoveryQuery.getSortOrder().equals(DiscoverQuery.SORT_ORDER.desc))
            order = SolrQuery.ORDER.desc;

        solrQuery.addSortField(discoveryQuery.getSortField(), order);
    }

    for (String property : discoveryQuery.getProperties().keySet()) {
        List<String> values = discoveryQuery.getProperties().get(property);
        solrQuery.add(property, values.toArray(new String[values.size()]));
    }

    List<DiscoverFacetField> facetFields = discoveryQuery.getFacetFields();
    if (0 < facetFields.size()) {
        //Only add facet information if there are any facets
        for (DiscoverFacetField facetFieldConfig : facetFields) {
            String field = transformFacetField(facetFieldConfig, facetFieldConfig.getField(), false);
            solrQuery.addFacetField(field);

            // Setting the facet limit in this fashion ensures that each facet can have its own max
            solrQuery.add("f." + field + "." + FacetParams.FACET_LIMIT,
                    String.valueOf(facetFieldConfig.getLimit()));
            String facetSort;
            if (DiscoveryConfigurationParameters.SORT.COUNT.equals(facetFieldConfig.getSortOrder())) {
                facetSort = FacetParams.FACET_SORT_COUNT;
            } else {
                facetSort = FacetParams.FACET_SORT_INDEX;
            }
            solrQuery.add("f." + field + "." + FacetParams.FACET_SORT, facetSort);
            if (facetFieldConfig.getOffset() != -1) {
                solrQuery.setParam("f." + field + "." + FacetParams.FACET_OFFSET,
                        String.valueOf(facetFieldConfig.getOffset()));
            }
            if (facetFieldConfig.getPrefix() != null) {
                solrQuery.setFacetPrefix(field, facetFieldConfig.getPrefix());
            }
        }

        List<String> facetQueries = discoveryQuery.getFacetQueries();
        for (String facetQuery : facetQueries) {
            solrQuery.addFacetQuery(facetQuery);
        }

        if (discoveryQuery.getFacetMinCount() != -1) {
            solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
        }

        solrQuery.setParam(FacetParams.FACET_OFFSET, String.valueOf(discoveryQuery.getFacetOffset()));
    }

    if (0 < discoveryQuery.getHitHighlightingFields().size()) {
        solrQuery.setHighlight(true);
        solrQuery.add(HighlightParams.USE_PHRASE_HIGHLIGHTER, Boolean.TRUE.toString());
        for (DiscoverHitHighlightingField highlightingField : discoveryQuery.getHitHighlightingFields()) {
            solrQuery.addHighlightField(highlightingField.getField() + "_hl");
            solrQuery.add("f." + highlightingField.getField() + "_hl." + HighlightParams.FRAGSIZE,
                    String.valueOf(highlightingField.getMaxChars()));
            solrQuery.add("f." + highlightingField.getField() + "_hl." + HighlightParams.SNIPPETS,
                    String.valueOf(highlightingField.getMaxSnippets()));
        }

    }

    //Add any configured search plugins !
    List<SolrServiceSearchPlugin> solrServiceSearchPlugins = new DSpace().getServiceManager()
            .getServicesByType(SolrServiceSearchPlugin.class);
    for (SolrServiceSearchPlugin searchPlugin : solrServiceSearchPlugins) {
        searchPlugin.additionalSearchParameters(context, discoveryQuery, solrQuery);
    }
    return solrQuery;
}

From source file:org.dspace.discovery.SolrServiceImpl.java

License:BSD License

public List<DSpaceObject> search(Context context, String query, String orderfield, boolean ascending,
        int offset, int max, String... filterquery) {

    try {//from w ww  . j  a va  2s .co m
        if (getSolr() == null) {
            return Collections.emptyList();
        }

        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(query);
        solrQuery.setFields("search.resourceid", "search.resourcetype");
        solrQuery.setStart(offset);
        solrQuery.setRows(max);
        if (orderfield != null) {
            solrQuery.setSortField(orderfield, ascending ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc);
        }
        if (filterquery != null) {
            solrQuery.addFilterQuery(filterquery);
        }
        QueryResponse rsp = getSolr().query(solrQuery);
        SolrDocumentList docs = rsp.getResults();

        Iterator iter = docs.iterator();
        List<DSpaceObject> result = new ArrayList<DSpaceObject>();
        while (iter.hasNext()) {
            SolrDocument doc = (SolrDocument) iter.next();

            DSpaceObject o = DSpaceObject.find(context, (Integer) doc.getFirstValue("search.resourcetype"),
                    (Integer) doc.getFirstValue("search.resourceid"));

            if (o != null) {
                result.add(o);
            }
        }
        return result;
    } catch (Exception e) {
        // Any acception that we get ignore it.
        // We do NOT want any crashed to shown by the user
        log.error(LogManager.getHeader(context, "Error while quering solr", "Queyr: " + query), e);
        return new ArrayList<DSpaceObject>(0);
    }
}

From source file:org.dspace.util.SolrImportExport.java

License:BSD License

/**
 * Exports documents from the given index to the specified target directory in batches of #ROWS_PER_FILE, starting at fromWhen (or all documents).
 * See #makeExportFilename for the file names that are generated.
 *
 * @param indexName The index to export.
 * @param toDir The target directory for the export. Will be created if it doesn't exist yet. The directory must be writeable.
 * @param solrUrl The solr URL for the index to export. Must not be null.
 * @param timeField The time field to use for sorting the export. Must not be null.
 * @param fromWhen Optionally, from when to export. See options for allowed values. If null or empty, all documents will be exported.
 * @throws SolrServerException if there is a problem with exporting the index.
 * @throws IOException if there is a problem creating the files or communicating with Solr.
 * @throws SolrImportExportException if there is a problem in communicating with Solr.
 *//*from   w ww. jav a2s .co m*/
public static void exportIndex(String indexName, File toDir, String solrUrl, String timeField, String fromWhen)
        throws SolrServerException, IOException, SolrImportExportException {
    if (StringUtils.isBlank(solrUrl)) {
        throw new SolrImportExportException(
                "Could not construct solr URL for index" + indexName + ", aborting export.");
    }

    if (!toDir.exists() || !toDir.canWrite()) {
        throw new SolrImportExportException("Target directory " + toDir
                + " doesn't exist or is not writable, aborting export of index " + indexName);
    }

    HttpSolrServer solr = new HttpSolrServer(solrUrl);

    SolrQuery query = new SolrQuery("*:*");
    if (StringUtils.isNotBlank(fromWhen)) {
        String lastValueFilter = makeFilterQuery(timeField, fromWhen);
        if (StringUtils.isNotBlank(lastValueFilter)) {
            query.addFilterQuery(lastValueFilter);
        }
    }

    query.setRows(0);
    query.setGetFieldStatistics(timeField);
    Map<String, FieldStatsInfo> fieldInfo = solr.query(query).getFieldStatsInfo();
    if (fieldInfo == null || !fieldInfo.containsKey(timeField)) {
        log.warn("Cannot get earliest date, not exporting index " + indexName + ", time field " + timeField
                + ", from " + fromWhen);
        return;
    }
    FieldStatsInfo timeFieldInfo = fieldInfo.get(timeField);
    if (timeFieldInfo == null || timeFieldInfo.getMin() == null) {
        log.warn("Cannot get earliest date, not exporting index " + indexName + ", time field " + timeField
                + ", from " + fromWhen);
        return;
    }
    Date earliestTimestamp = (Date) timeFieldInfo.getMin();

    query.setGetFieldStatistics(false);
    query.clearSorts();
    query.setRows(0);
    query.setFacet(true);
    query.add(FacetParams.FACET_RANGE, timeField);
    query.add(FacetParams.FACET_RANGE_START, SOLR_DATE_FORMAT.format(earliestTimestamp) + "/MONTH");
    query.add(FacetParams.FACET_RANGE_END, "NOW/MONTH+1MONTH");
    query.add(FacetParams.FACET_RANGE_GAP, "+1MONTH");
    query.setFacetMinCount(1);

    List<RangeFacet.Count> monthFacets = solr.query(query).getFacetRanges().get(0).getCounts();

    for (RangeFacet.Count monthFacet : monthFacets) {
        Date monthStartDate;
        String monthStart = monthFacet.getValue();
        try {
            monthStartDate = SOLR_DATE_FORMAT_NO_MS.parse(monthStart);
        } catch (java.text.ParseException e) {
            throw new SolrImportExportException("Could not read start of month batch as date: " + monthStart,
                    e);
        }
        int docsThisMonth = monthFacet.getCount();

        SolrQuery monthQuery = new SolrQuery("*:*");
        monthQuery.setRows(ROWS_PER_FILE);
        monthQuery.set("wt", "csv");
        monthQuery.set("fl", "*");

        monthQuery.addFilterQuery(timeField + ":[" + monthStart + " TO " + monthStart + "+1MONTH]");

        for (int i = 0; i < docsThisMonth; i += ROWS_PER_FILE) {
            monthQuery.setStart(i);
            URL url = new URL(solrUrl + "/select?" + monthQuery.toString());

            File file = new File(toDir.getCanonicalPath(),
                    makeExportFilename(indexName, monthStartDate, docsThisMonth, i));
            if (file.createNewFile()) {
                FileUtils.copyURLToFile(url, file);
                log.info("Exported batch " + i + " to " + file.getCanonicalPath());
            } else {
                throw new SolrImportExportException("Could not create file " + file.getCanonicalPath()
                        + " while exporting index " + indexName + ", month" + monthStart + ", batch " + i);
            }
        }
    }
}

From source file:org.emonocot.persistence.dao.hibernate.SearchableDaoImpl.java

License:Open Source License

public CellSet analyse(String rows, String cols, Integer firstCol, Integer maxCols, Integer firstRow,
        Integer maxRows, Map<String, String> selectedFacets, String[] facets, Cube cube)
        throws SolrServerException {
    SolrQuery query = new SolrQuery();
    query.setQuery("*:*");
    SolrQuery totalQuery = new SolrQuery();
    totalQuery.setQuery("*:*");

    // We're not interested in the results themselves
    query.setRows(1);//from  ww  w .  j a  v  a 2  s.co m
    query.setStart(0);
    totalQuery.setRows(1);
    totalQuery.setStart(0);

    if (rows == null) {
        query.setFacet(true);
        query.setFacetMinCount(1);
        query.setFacetSort(FacetParams.FACET_SORT_INDEX);
        query.addFacetField(cube.getDefaultLevel());
        includeMissing(query, cube.getDefaultLevel());
        includeMissing(totalQuery, cube.getDefaultLevel());
        if (maxRows != null) {
            totalQuery.setFacet(true);
            totalQuery.setFacetMinCount(1);
            totalQuery.addFacetField("{!key=totalRows}" + cube.getDefaultLevel());

            query.add("f." + cube.getDefaultLevel() + ".facet.limit", maxRows.toString());
            query.add("f." + cube.getDefaultLevel() + ".facet.mincount", "1");
            if (firstRow != null) {
                query.add("f." + cube.getDefaultLevel() + ".facet.offset", firstRow.toString());
            }
        }
    } else if (cols == null) {
        query.setFacet(true);
        query.setFacetMinCount(1);
        query.setFacetSort(FacetParams.FACET_SORT_INDEX);
        query.addFacetField(rows);
        includeMissing(query, rows);
        includeMissing(totalQuery, rows);
        if (maxRows != null) {
            totalQuery.setFacet(true);
            totalQuery.setFacetMinCount(1);
            totalQuery.addFacetField("{!key=totalRows}" + rows);
            query.add("f." + rows + ".facet.limit", maxRows.toString());
            query.add("f." + rows + ".facet.mincount", "1");
            if (firstRow != null) {
                query.add("f." + rows + ".facet.offset", firstRow.toString());
            }
        }
        if (cube.getLevel(rows).isMultiValued() && cube.getLevel(rows).getHigher() != null) {
            Level higher = cube.getLevel(rows).getHigher();
            totalQuery.add("f." + rows + ".facet.prefix", selectedFacets.get(higher.getFacet()) + "_");
            query.add("f." + rows + ".facet.prefix", selectedFacets.get(higher.getFacet()) + "_");
        }
    } else {
        query.setFacet(true);
        query.setFacetMinCount(1);
        query.setFacetSort(FacetParams.FACET_SORT_INDEX);
        query.addFacetField(rows);
        includeMissing(query, rows);
        includeMissing(totalQuery, rows);
        if (maxRows != null) {
            totalQuery.setFacet(true);
            totalQuery.setFacetMinCount(1);
            totalQuery.addFacetField("{!key=totalRows}" + rows);
            query.add("f." + rows + ".facet.limit", maxRows.toString());
            query.add("f." + rows + ".facet.mincount", "1");
            if (firstRow != null) {
                query.add("f." + rows + ".facet.offset", firstRow.toString());
            }
        }
        if (cube.getLevel(rows).isMultiValued() && cube.getLevel(rows).getHigher() != null) {
            Level higher = cube.getLevel(rows).getHigher();
            totalQuery.add("f." + rows + ".facet.prefix", selectedFacets.get(higher.getFacet()) + "_");
            query.add("f." + rows + ".facet.prefix", selectedFacets.get(higher.getFacet()) + "_");
        }
        query.addFacetField(cols);
        includeMissing(query, cols);
        if (maxCols != null) {
            totalQuery.setFacet(true);
            totalQuery.setFacetMinCount(1);
            totalQuery.addFacetField("{!key=totalCols}" + cols);
            /**
             * Facet pivot does not behave the same way on columns - the limit is
             */
            //query.add("f." + cols + ".facet.limit", maxCols.toString());
            //query.add("f." + cols + ".facet.mincount", "1");
            //if (firstCol != null) {
            //   query.add("f." + cols + ".facet.offset", firstCol.toString());
            //}
        }
        if (cube.getLevel(cols).isMultiValued() && cube.getLevel(cols).getHigher() != null) {
            Level higher = cube.getLevel(cols).getHigher();
            totalQuery.add("f." + cols + ".facet.prefix", selectedFacets.get(higher.getFacet()) + "_");
            query.add("f." + cols + ".facet.prefix", selectedFacets.get(higher.getFacet()) + "_");
        }
        query.addFacetPivotField(rows + "," + cols);
    }

    if (selectedFacets != null && !selectedFacets.isEmpty()) {
        for (String facetName : selectedFacets.keySet()) {
            String facetValue = selectedFacets.get(facetName);
            if (StringUtils.isNotEmpty(facetValue)) {
                totalQuery.addFilterQuery(facetName + ":" + selectedFacets.get(facetName));
                query.addFilterQuery(facetName + ":" + selectedFacets.get(facetName));
            } else {//Subtract/Exclude documents with any value for the facet
                totalQuery.addFilterQuery("-" + facetName + ":[* TO *]");
                query.addFilterQuery("-" + facetName + ":[* TO *]");
            }
        }
    }

    if (facets != null && facets.length != 0) {
        query.setFacet(true);
        query.setFacetMinCount(1);
        query.setFacetSort(FacetParams.FACET_SORT_INDEX);

        for (String facetName : facets) {
            if (rows != null && rows.equals(facetName)) {
            } else if (cols != null && cols.equals(facetName)) {
            } else if (rows == null && facetName.equals(cube.getDefaultLevel())) {
            } else {
                includeMissing(query, facetName);
                query.addFacetField(facetName);
            }
        }
    }

    QueryResponse response = solrServer.query(query);
    QueryResponse totalResponse = solrServer.query(totalQuery);
    FacetField totalRows = null;
    FacetField totalCols = null;
    if (totalResponse.getFacetField("totalRows") != null) {
        totalRows = totalResponse.getFacetField("totalRows");
    }

    if (totalResponse.getFacetField("totalCols") != null) {
        totalCols = totalResponse.getFacetField("totalCols");
    }

    CellSet cellSet = new CellSet(response, selectedFacets, query, rows, cols, firstRow, maxRows, firstCol,
            maxCols, totalRows, totalCols, cube);

    return cellSet;
}