List of usage examples for org.apache.solr.client.solrj SolrQuery setParam
public SolrQuery setParam(String name, boolean value)
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()); } } }