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

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

Introduction

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

Prototype

public SolrQuery setParam(String name, boolean value) 

Source Link

Usage

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

License:BSD License

public InputStream searchJSON(Context context, DiscoverQuery discoveryQuery, String jsonIdentifier)
        throws SearchServiceException {
    if (getSolr() == null) {
        return null;
    }/*  www .jav a2  s  . c  om*/

    SolrQuery solrQuery = resolveToSolrQuery(context, discoveryQuery, false);
    //We use json as out output type
    solrQuery.setParam("json.nl", "map");
    solrQuery.setParam("json.wrf", jsonIdentifier);
    solrQuery.setParam(CommonParams.WT, "json");

    StringBuilder urlBuilder = new StringBuilder();
    urlBuilder.append(getSolr().getBaseURL()).append("/select?");
    urlBuilder.append(solrQuery.toString());

    try {
        HttpGet get = new HttpGet(urlBuilder.toString());
        HttpResponse response = new DefaultHttpClient().execute(get);
        return response.getEntity().getContent();

    } catch (Exception e) {
        log.error("Error while getting json solr result for discovery search recommendation", e);
    }
    return null;
}

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

License:BSD License

@Override
public List<Item> getRelatedItems(Context context, Item item, DiscoveryMoreLikeThisConfiguration mltConfig) {
    List<Item> results = new ArrayList<Item>();
    try {// w ww  . jav a  2 s  . co m
        SolrQuery solrQuery = new SolrQuery();
        //Set the query to handle since this is unique
        solrQuery.setQuery("handle: " + item.getHandle());
        //Add the more like this parameters !
        solrQuery.setParam(MoreLikeThisParams.MLT, true);
        //Add a comma separated list of the similar fields
        @SuppressWarnings("unchecked")
        java.util.Collection<String> similarityMetadataFields = CollectionUtils
                .collect(mltConfig.getSimilarityMetadataFields(), new Transformer() {
                    @Override
                    public Object transform(Object input) {
                        //Add the mlt appendix !
                        return input + "_mlt";
                    }
                });

        solrQuery.setParam(MoreLikeThisParams.SIMILARITY_FIELDS,
                StringUtils.join(similarityMetadataFields, ','));
        solrQuery.setParam(MoreLikeThisParams.MIN_TERM_FREQ, String.valueOf(mltConfig.getMinTermFrequency()));
        solrQuery.setParam(MoreLikeThisParams.DOC_COUNT, String.valueOf(mltConfig.getMax()));
        solrQuery.setParam(MoreLikeThisParams.MIN_WORD_LEN, String.valueOf(mltConfig.getMinWordLength()));

        if (getSolr() == null) {
            return Collections.emptyList();
        }
        QueryResponse rsp = getSolr().query(solrQuery);
        NamedList mltResults = (NamedList) rsp.getResponse().get("moreLikeThis");
        if (mltResults != null && mltResults.get(item.getType() + "-" + item.getID()) != null) {
            SolrDocumentList relatedDocs = (SolrDocumentList) mltResults
                    .get(item.getType() + "-" + item.getID());
            for (Object relatedDoc : relatedDocs) {
                SolrDocument relatedDocument = (SolrDocument) relatedDoc;
                DSpaceObject relatedItem = findDSpaceObject(context, relatedDocument);
                if (relatedItem.getType() == Constants.ITEM) {
                    results.add((Item) relatedItem);
                }
            }
        }

    } catch (Exception e) {
        log.error(LogManager.getHeader(context, "Error while retrieving related items",
                "Handle: " + item.getHandle()), e);
    }
    return results;
}

From source file:org.dspace.statistics.SolrLogger.java

License:BSD License

public static QueryResponse query(String query, String filterQuery, String facetField, int rows, int max,
        String dateType, String dateStart, String dateEnd, List<String> facetQueries, String sort,
        boolean ascending) throws SolrServerException {
    if (solr == null) {
        return null;
    }// ww  w. j  a v a 2  s.c o  m

    // System.out.println("QUERY");
    SolrQuery solrQuery = new SolrQuery().setRows(rows).setQuery(query).setFacetMinCount(1);
    addAdditionalSolrYearCores(solrQuery);

    // Set the date facet if present
    if (dateType != null) {
        solrQuery.setParam("facet.date", "time").
        // EXAMPLE: NOW/MONTH+1MONTH
                setParam("facet.date.end", "NOW/" + dateType + dateEnd + dateType)
                .setParam("facet.date.gap", "+1" + dateType).
                // EXAMPLE: NOW/MONTH-" + nbMonths + "MONTHS
                setParam("facet.date.start", "NOW/" + dateType + dateStart + dateType + "S").setFacet(true);
    }
    if (facetQueries != null) {
        for (int i = 0; i < facetQueries.size(); i++) {
            String facetQuery = facetQueries.get(i);
            solrQuery.addFacetQuery(facetQuery);
        }
        if (0 < facetQueries.size()) {
            solrQuery.setFacet(true);
        }
    }

    if (facetField != null) {
        solrQuery.addFacetField(facetField);
    }

    // Set the top x of if present
    if (max != -1) {
        solrQuery.setFacetLimit(max);
    }

    // A filter is used instead of a regular query to improve
    // performance and ensure the search result ordering will
    // not be influenced

    // Choose to filter by the Legacy spider IP list (may get too long to properly filter all IP's
    if (ConfigurationManager.getBooleanProperty("solr-statistics", "query.filter.spiderIp", false)) {
        solrQuery.addFilterQuery(getIgnoreSpiderIPs());
    }

    // Choose to filter by isBot field, may be overriden in future
    // to allow views on stats based on bots.
    if (ConfigurationManager.getBooleanProperty("solr-statistics", "query.filter.isBot", true)) {
        solrQuery.addFilterQuery("-isBot:true");
    }

    if (sort != null) {
        solrQuery.setSortField(sort, (ascending ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc));
    }

    String bundles;
    if ((bundles = ConfigurationManager.getProperty("solr-statistics", "query.filter.bundles")) != null
            && 0 < bundles.length()) {

        /**
         * The code below creates a query that will allow only records which do not have a bundlename
         * (items, collections, ...) or bitstreams that have a configured bundle name
         */
        StringBuffer bundleQuery = new StringBuffer();
        //Also add the possibility that if no bundle name is there these results will also be returned !
        bundleQuery.append("-(bundleName:[* TO *]");
        String[] split = bundles.split(",");
        for (int i = 0; i < split.length; i++) {
            String bundle = split[i].trim();
            bundleQuery.append("-bundleName:").append(bundle);
            if (i != split.length - 1) {
                bundleQuery.append(" AND ");
            }
        }
        bundleQuery.append(")");

        solrQuery.addFilterQuery(bundleQuery.toString());
    }

    if (filterQuery != null) {
        solrQuery.addFilterQuery(filterQuery);
    }

    QueryResponse response;
    try {
        // solr.set
        response = solr.query(solrQuery);
    } catch (SolrServerException e) {
        System.err.println("Error using query " + query);
        throw e;
    }
    return response;
}

From source file:org.dspace.statistics.SolrLoggerServiceImpl.java

License:BSD License

@Override
public QueryResponse query(String query, String filterQuery, String facetField, int rows, int max,
        String dateType, String dateStart, String dateEnd, List<String> facetQueries, String sort,
        boolean ascending) throws SolrServerException {
    if (solr == null) {
        return null;
    }/*from   w w w.  j  a  va2s  . co  m*/

    // System.out.println("QUERY");
    SolrQuery solrQuery = new SolrQuery().setRows(rows).setQuery(query).setFacetMinCount(1);
    addAdditionalSolrYearCores(solrQuery);

    // Set the date facet if present
    if (dateType != null) {
        solrQuery.setParam("facet.date", "time").
        // EXAMPLE: NOW/MONTH+1MONTH
                setParam("facet.date.end", "NOW/" + dateType + dateEnd + dateType)
                .setParam("facet.date.gap", "+1" + dateType).
                // EXAMPLE: NOW/MONTH-" + nbMonths + "MONTHS
                setParam("facet.date.start", "NOW/" + dateType + dateStart + dateType + "S").setFacet(true);
    }
    if (facetQueries != null) {
        for (int i = 0; i < facetQueries.size(); i++) {
            String facetQuery = facetQueries.get(i);
            solrQuery.addFacetQuery(facetQuery);
        }
        if (0 < facetQueries.size()) {
            solrQuery.setFacet(true);
        }
    }

    if (facetField != null) {
        solrQuery.addFacetField(facetField);
    }

    // Set the top x of if present
    if (max != -1) {
        solrQuery.setFacetLimit(max);
    }

    // A filter is used instead of a regular query to improve
    // performance and ensure the search result ordering will
    // not be influenced

    // Choose to filter by the Legacy spider IP list (may get too long to properly filter all IP's
    if (configurationService.getBooleanProperty("solr-statistics.query.filter.spiderIp", false)) {
        solrQuery.addFilterQuery(getIgnoreSpiderIPs());
    }

    // Choose to filter by isBot field, may be overriden in future
    // to allow views on stats based on bots.
    if (configurationService.getBooleanProperty("solr-statistics.query.filter.isBot", true)) {
        solrQuery.addFilterQuery("-isBot:true");
    }

    if (sort != null) {
        solrQuery.setSortField(sort, (ascending ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc));
    }

    String[] bundles = configurationService.getArrayProperty("solr-statistics.query.filter.bundles");
    if (bundles != null && bundles.length > 0) {

        /**
         * The code below creates a query that will allow only records which do not have a bundlename
         * (items, collections, ...) or bitstreams that have a configured bundle name
         */
        StringBuffer bundleQuery = new StringBuffer();
        //Also add the possibility that if no bundle name is there these results will also be returned !
        bundleQuery.append("-(bundleName:[* TO *]");
        for (int i = 0; i < bundles.length; i++) {
            String bundle = bundles[i].trim();
            bundleQuery.append("-bundleName:").append(bundle);
            if (i != bundles.length - 1) {
                bundleQuery.append(" AND ");
            }
        }
        bundleQuery.append(")");

        solrQuery.addFilterQuery(bundleQuery.toString());
    }

    if (filterQuery != null) {
        solrQuery.addFilterQuery(filterQuery);
    }

    QueryResponse response;
    try {
        // solr.set
        response = solr.query(solrQuery);
    } catch (SolrServerException e) {
        System.err.println("Error using query " + query);
        throw e;
    }
    return response;
}

From source file:org.eclipse.orion.internal.server.search.Indexer.java

License:Open Source License

private boolean isModified(IFileStore file, IFileInfo fileInfo) {
    try {//from w  w  w.  j a  va2 s. com
        //if there is no match, then the file last modified doesn't match last index so assume it was modified
        StringBuffer qString = new StringBuffer(ProtocolConstants.KEY_ID);
        qString.append(':');
        qString.append(ClientUtils.escapeQueryChars(file.toURI().toString()));
        qString.append(" AND "); //$NON-NLS-1$
        qString.append(ProtocolConstants.KEY_LAST_MODIFIED);
        qString.append(':');
        qString.append(Long.toString(fileInfo.getLastModified()));
        SolrQuery query = new SolrQuery(qString.toString());
        query.setParam(CommonParams.FL, ProtocolConstants.KEY_ID);
        QueryResponse response = server.query(query);
        return response.getResults().getNumFound() == 0;
    } catch (SolrServerException e) {
        handleIndexingFailure(e);
        //attempt to re-index
        return true;
    }
}

From source file:org.eclipse.orion.internal.server.search.IndexPurgeJob.java

License:Open Source License

private SolrQuery findAllQuery() {
    SolrQuery query = new SolrQuery();
    query.setParam(CommonParams.ROWS, Long.toString(PAGE_SIZE));
    query.setQuery("*:*"); //$NON-NLS-1$
    return query;
}

From source file:org.eclipse.orion.internal.server.search.IndexPurgeJob.java

License:Open Source License

@Override
protected IStatus run(IProgressMonitor monitor) {
    Logger logger = LoggerFactory.getLogger(Indexer.class);
    if (logger.isDebugEnabled())
        logger.debug("Purging indexes"); //$NON-NLS-1$
    long start = System.currentTimeMillis();
    SolrQuery query = findAllQuery();
    try {//from   w w  w  .  j ava 2  s .  co  m
        QueryResponse solrResponse = this.server.query(findAllQuery);
        SolrDocumentList result = solrResponse.getResults();
        long numFound = result.getNumFound();
        long processed = 0;
        List<String> listIds = new ArrayList<String>();
        if (numFound > processed) {
            while (true) {
                checkCanceled(monitor);
                markStaleIndexes(result, listIds);
                processed += PAGE_SIZE;
                if (processed >= numFound)
                    break;
                query.setParam(CommonParams.START, Long.toString(processed));
                solrResponse = this.server.query(query);
                result = solrResponse.getResults();
                // New indexes may have been added, perhaps
                numFound = result.getNumFound();
            }
        }

        checkCanceled(monitor);
        if (listIds.size() > 0) {
            this.server.deleteById(listIds);
            this.server.commit();
        }
        if (logger.isDebugEnabled())
            logger.debug("\tPurged: " + listIds.size()); //$NON-NLS-1$

    } catch (Exception e) {
        handleIndexingFailure(e);
    }
    long duration = System.currentTimeMillis() - start;
    if (logger.isDebugEnabled())
        logger.debug("Purge job took " + duration + "ms"); //$NON-NLS-1$ //$NON-NLS-2$

    //throttle scheduling frequency so the job never runs more than 5% of the time
    long delay = Math.max(DEFAULT_DELAY, duration * 20);
    schedule(delay);
    return Status.OK_STATUS;
}

From source file:org.eclipse.orion.internal.server.search.SearchServlet.java

License:Open Source License

private SolrQuery buildSolrQuery(HttpServletRequest req) {
    SolrQuery query = new SolrQuery();
    query.setParam(CommonParams.WT, "json");
    query.setParam(CommonParams.FL, "Id,Name,Length,Directory,LastModified,Location");
    query.setParam("hl", "true");
    String queryString = req.getParameter(CommonParams.Q);
    queryString += " AND " + ProtocolConstants.KEY_USER_NAME + ':' + req.getRemoteUser();
    query.setQuery(queryString);//from  w  w  w.j  a  v  a 2 s  .c o m
    return query;
}

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

License:Open Source License

/**
 * @param query//from w  w  w  .j a v  a2 s  .co  m
 *            A lucene query
 * @param spatialQuery
 *            A spatial query to filter the results by
 * @param pageSize
 *            The maximum number of results to return
 * @param pageNumber
 *            The offset (in pageSize chunks, 0-based) from the beginning of
 *            the recordset
 * @param facets
 *            The names of the facets you want to calculate
 * @param selectedFacets
 *            A map of facets which you would like to restrict the search by
 * @param sort
 *            A representation for the order results should be returned in
 * @param fetch
 *            Set the fetch profile
 * @return a Page from the resultset
 * @throws SolrServerException
 */
public final Page<T> search(final String query, final String spatialQuery, final Integer pageSize,
        final Integer pageNumber, final String[] facets, Map<String, String> facetPrefixes,
        final Map<String, String> selectedFacets, final String sort, final String fetch)
        throws SolrServerException {
    SolrQuery solrQuery = prepareQuery(query, sort, pageSize, pageNumber, selectedFacets);
    solrQuery.set("spellcheck", "true");
    solrQuery.set("spellcheck.collate", "true");
    solrQuery.set("spellcheck.count", "1");
    solrQuery.set("bq", "base.class_s:org.emonocot.model.Taxon^2.0");

    // Filter the searchable objects out
    solrQuery.addFilterQuery("base.class_searchable_b:" + isSearchableObject());

    if (spatialQuery != null && spatialQuery.trim().length() != 0) {
        solrQuery.addFilterQuery(spatialQuery);
    }

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

        for (String facet : facets) {
            if (facet.equals("base.class_s")) {
                solrQuery.setParam("f.base.class_s.facet.sort", FacetParams.FACET_SORT_COUNT);
            }
            if (facet.endsWith("_dt")) {
                /**
                 * Is a date facet. Once Solr 4.2 is released, we can implement variable length buckets, but for now
                 * stick with fixed buckets https://issues.apache.org/jira/browse/SOLR-2366
                 */

                solrQuery.add("facet.range", facet);
                solrQuery.add("f." + facet + ".facet.range.start", "NOW/DAY-1YEARS");
                solrQuery.add("f." + facet + ".facet.range.end", "NOW/DAY");
                solrQuery.add("f." + facet + ".facet.range.gap", "+1MONTH");
            } else {
                solrQuery.addFacetField(facet);
            }
            includeMissing(solrQuery, facet);
        }
        if (facetPrefixes != null) {
            for (String facet : facetPrefixes.keySet()) {
                solrQuery.add("f." + facet + ".facet.prefix", facetPrefixes.get(facet));
            }
        }
    }
    QueryResponse queryResponse = solrServer.query(solrQuery);

    List<T> results = new ArrayList<T>();
    for (SolrDocument solrDocument : queryResponse.getResults()) {
        T object = loadObjectForDocument(solrDocument);
        enableProfilePostQuery(object, fetch);
        results.add(object);
    }

    Long totalResults = new Long(queryResponse.getResults().getNumFound());
    Page<T> page = new DefaultPageImpl<T>(totalResults.intValue(), pageNumber, pageSize, results,
            queryResponse);
    if (selectedFacets != null) {
        page.setSelectedFacets(selectedFacets);
    }
    page.setSort(sort);

    return page;
}

From source file:org.gbif.common.search.builder.SolrQueryBuilder.java

License:Apache License

/**
 * Helper method that sets the parameter for a faceted query.
 * /*  w  ww  .  j av  a  2s  .com*/
 * @param searchRequest the searchRequest used to extract the parameters
 * @param solrQuery this object is modified by adding the facets parameters
 */
private void applyFacetSettings(FacetedSearchRequest<P> searchRequest, SolrQuery solrQuery) {

    final BiMap<P, String> facetFieldsMapInv = facetFieldsPropertiesMap.inverse();

    if (!searchRequest.getFacets().isEmpty()) {
        // Only show facets that contains at least 1 record
        solrQuery.setFacet(true);
        // defaults if not overridden on per field basis
        solrQuery.setFacetMinCount(Objects.firstNonNull(searchRequest.getFacetMinCount(), DEFAULT_FACET_COUNT));
        solrQuery.setFacetMissing(DEFAULT_FACET_MISSING);
        solrQuery.setFacetSort(DEFAULT_FACET_SORT.toString().toLowerCase());

        for (final P facet : searchRequest.getFacets()) {
            if (!facetFieldsMapInv.containsKey(facet)) {
                LOG.warn("{} is no valid facet. Ignore", facet);
                continue;
            }
            final String field = facetFieldsMapInv.get(facet);
            if (searchRequest.isMultiSelectFacets()) {
                // use exclusion filter with same name as used in filter query
                // http://wiki.apache.org/solr/SimpleFacetParameters#Tagging_and_excluding_Filters
                solrQuery.addFacetField(FACET_FILTER_EX.replace(TAG_FIELD_PARAM, field));
            } else {
                solrQuery.addFacetField(field);
            }
            FacetField fieldDef = facetFieldDefs.get(field);
            if (fieldDef.missing() != DEFAULT_FACET_MISSING) {
                solrQuery.setParam(perFieldParamName(field, PARAM_FACET_MISSING), fieldDef.missing());
            }
            if (fieldDef.sort() != DEFAULT_FACET_SORT) {
                solrQuery.setParam(perFieldParamName(field, PARAM_FACET_SORT),
                        fieldDef.sort().toString().toLowerCase());
            }
            setFacetMethod(solrQuery, field, fieldDef.method());
        }
    }
}