List of usage examples for org.apache.solr.client.solrj SolrQuery setStart
public SolrQuery setStart(Integer start)
From source file:org.opencastproject.search.impl.solr.SolrRequester.java
License:Educational Community License
/** * Converts the query object into a solr query and returns the results. * //w w w . j av a2 s . c o m * @param q * the query * @param action * one of {@link org.opencastproject.search.api.SearchService#READ_PERMISSION}, * {@link org.opencastproject.search.api.SearchService#WRITE_PERMISSION} * @param applyPermissions * whether to apply the permissions to the query. Set to false for administrative queries. * @return the search results */ private SolrQuery getForAction(SearchQuery q, String action, boolean applyPermissions) throws SolrServerException { StringBuilder sb = new StringBuilder(); if (StringUtils.isNotBlank(q.getQuery())) sb.append(q.getQuery()); String solrIdRequest = StringUtils.trimToNull(q.getId()); if (solrIdRequest != null) { String cleanSolrIdRequest = SolrUtils.clean(solrIdRequest); if (sb.length() > 0) sb.append(" AND "); sb.append("("); sb.append(Schema.ID); sb.append(":"); sb.append(cleanSolrIdRequest); if (q.isIncludeEpisodes() && q.isIncludeSeries()) { sb.append(" OR "); sb.append(Schema.DC_IS_PART_OF); sb.append(":"); sb.append(cleanSolrIdRequest); } sb.append(")"); } String solrSeriesIdRequest = StringUtils.trimToNull(q.getSeriesId()); if (solrSeriesIdRequest != null) { String cleanSolrSeriesIdRequest = SolrUtils.clean(solrSeriesIdRequest); if (sb.length() > 0) { sb.append(" AND "); } sb.append("("); sb.append(Schema.DC_IS_PART_OF); sb.append(":"); sb.append(cleanSolrSeriesIdRequest); sb.append(")"); } String solrTextRequest = StringUtils.trimToNull(q.getText()); if (solrTextRequest != null) { String cleanSolrTextRequest = SolrUtils.clean(q.getText()); if (StringUtils.isNotEmpty(cleanSolrTextRequest)) { if (sb.length() > 0) sb.append(" AND "); sb.append("*:"); sb.append(boost(cleanSolrTextRequest)); } } if (q.getElementTags() != null && q.getElementTags().length > 0) { if (sb.length() > 0) sb.append(" AND "); StringBuilder tagBuilder = new StringBuilder(); for (int i = 0; i < q.getElementTags().length; i++) { String tag = SolrUtils.clean(q.getElementTags()[i]); if (StringUtils.isEmpty(tag)) continue; if (tagBuilder.length() == 0) { tagBuilder.append("("); } else { tagBuilder.append(" OR "); } tagBuilder.append(Schema.OC_ELEMENTTAGS); tagBuilder.append(":"); tagBuilder.append(tag); } if (tagBuilder.length() > 0) { tagBuilder.append(") "); sb.append(tagBuilder); } } if (q.getElementFlavors() != null && q.getElementFlavors().length > 0) { if (sb.length() > 0) sb.append(" AND "); StringBuilder flavorBuilder = new StringBuilder(); for (int i = 0; i < q.getElementFlavors().length; i++) { String flavor = SolrUtils.clean(q.getElementFlavors()[i].toString()); if (StringUtils.isEmpty(flavor)) continue; if (flavorBuilder.length() == 0) { flavorBuilder.append("("); } else { flavorBuilder.append(" OR "); } flavorBuilder.append(Schema.OC_ELEMENTFLAVORS); flavorBuilder.append(":"); flavorBuilder.append(flavor); } if (flavorBuilder.length() > 0) { flavorBuilder.append(") "); sb.append(flavorBuilder); } } if (q.getDeletedDate() != null) { if (sb.length() > 0) sb.append(" AND "); sb.append(Schema.OC_DELETED + ":" + SolrUtils.serializeDateRange(option(q.getDeletedDate()), Option.<Date>none())); } if (sb.length() == 0) sb.append("*:*"); if (applyPermissions) { sb.append(" AND ").append(Schema.OC_ORGANIZATION).append(":") .append(SolrUtils.clean(securityService.getOrganization().getId())); User user = securityService.getUser(); String[] roles = user.getRoles(); boolean userHasAnonymousRole = false; if (roles.length > 0) { sb.append(" AND ("); StringBuilder roleList = new StringBuilder(); for (String role : roles) { if (roleList.length() > 0) roleList.append(" OR "); roleList.append(Schema.OC_ACL_PREFIX).append(action).append(":").append(SolrUtils.clean(role)); if (role.equalsIgnoreCase(securityService.getOrganization().getAnonymousRole())) { userHasAnonymousRole = true; } } if (!userHasAnonymousRole) { if (roleList.length() > 0) roleList.append(" OR "); roleList.append(Schema.OC_ACL_PREFIX).append(action).append(":") .append(SolrUtils.clean(securityService.getOrganization().getAnonymousRole())); } sb.append(roleList.toString()); sb.append(")"); } } if (!q.isIncludeEpisodes()) { if (sb.length() > 0) sb.append(" AND "); sb.append("-" + Schema.OC_MEDIATYPE + ":" + SearchResultItemType.AudioVisual); } if (!q.isIncludeSeries()) { if (sb.length() > 0) sb.append(" AND "); sb.append("-" + Schema.OC_MEDIATYPE + ":" + SearchResultItemType.Series); } if (q.getDeletedDate() == null) { if (sb.length() > 0) sb.append(" AND "); sb.append("-" + Schema.OC_DELETED + ":[* TO *]"); } SolrQuery query = new SolrQuery(sb.toString()); if (q.getLimit() > 0) { query.setRows(q.getLimit()); } else { query.setRows(Integer.MAX_VALUE); } if (q.getOffset() > 0) query.setStart(q.getOffset()); if (q.isSortByPublicationDate()) { query.addSortField(Schema.OC_MODIFIED, ORDER.desc); } else if (q.isSortByCreationDate()) { query.addSortField(Schema.DC_CREATED, ORDER.desc); // If the dublin core field dc:created has not been filled in... query.addSortField(Schema.OC_MODIFIED, ORDER.desc); } query.setFields("* score"); return query; }
From source file:org.opencastproject.series.impl.solr.SeriesServiceSolrIndex.java
License:Educational Community License
/** * {@inheritDoc}/*from w ww . ja v a 2 s .c o m*/ */ @Override public DublinCoreCatalogList search(SeriesQuery query) throws SeriesServiceDatabaseException { int count = query.getCount() > 0 ? (int) query.getCount() : 20; // default to 20 items if not specified int startPage = query.getStartPage() > 0 ? (int) query.getStartPage() : 0; // default to page zero SolrQuery solrQuery = new SolrQuery(); solrQuery.setRows(count); solrQuery.setStart(startPage * count); String solrQueryString = null; solrQueryString = buildSolrQueryString(query, query.isEdit()); solrQuery.setQuery(solrQueryString); if (query.getSort() != null) { SolrQuery.ORDER order = query.isSortAscending() ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc; solrQuery.addSortField(getSortField(query.getSort()) + "_sort", order); } if (!SeriesQuery.Sort.CREATED.equals(query.getSort())) { solrQuery.addSortField(getSortField(SeriesQuery.Sort.CREATED) + "_sort", SolrQuery.ORDER.desc); } List<DublinCoreCatalog> result; try { QueryResponse response = solrServer.query(solrQuery); SolrDocumentList items = response.getResults(); result = new LinkedList<DublinCoreCatalog>(); // Iterate through the results for (SolrDocument doc : items) { DublinCoreCatalog item = parseDublinCore((String) doc.get(SolrFields.XML_KEY)); result.add(item); } return new DublinCoreCatalogList(result, response.getResults().getNumFound()); } catch (Exception e) { logger.error("Could not retrieve results: {}", e.getMessage()); throw new SeriesServiceDatabaseException(e); } }
From source file:org.opencastproject.workflow.impl.WorkflowServiceSolrIndex.java
License:Educational Community License
/** * {@inheritDoc}//from w w w. j a va 2 s . c o m * * @see org.opencastproject.workflow.impl.WorkflowServiceIndex#getWorkflowInstances(org.opencastproject.workflow.api.WorkflowQuery, * String, boolean) */ @Override public WorkflowSet getWorkflowInstances(WorkflowQuery query, String action, boolean applyPermissions) throws WorkflowDatabaseException { int count = query.getCount() > 0 ? (int) query.getCount() : 20; // default to 20 items if not specified int startPage = query.getStartPage() > 0 ? (int) query.getStartPage() : 0; // default to page zero SolrQuery solrQuery = new SolrQuery(); solrQuery.setRows(count); solrQuery.setStart(startPage * count); String solrQueryString = createQuery(query, action, applyPermissions); solrQuery.setQuery(solrQueryString); if (query.getSort() != null) { ORDER order = query.isSortAscending() ? ORDER.asc : ORDER.desc; solrQuery.addSortField(getSortField(query.getSort()) + "_sort", order); } if (!Sort.DATE_CREATED.equals(query.getSort())) { solrQuery.addSortField(getSortField(Sort.DATE_CREATED) + "_sort", ORDER.desc); } long totalHits; long time = System.currentTimeMillis(); WorkflowSetImpl set = null; try { QueryResponse response = solrServer.query(solrQuery); SolrDocumentList items = response.getResults(); long searchTime = System.currentTimeMillis() - time; totalHits = items.getNumFound(); set = new WorkflowSetImpl(); set.setPageSize(count); set.setTotalCount(totalHits); set.setStartPage(query.getStartPage()); set.setSearchTime(searchTime); // Iterate through the results for (SolrDocument doc : items) { String xml = (String) doc.get(XML_KEY); try { set.addItem(WorkflowParser.parseWorkflowInstance(xml)); } catch (Exception e) { throw new IllegalStateException("can not parse workflow xml", e); } } } catch (Exception e) { throw new WorkflowDatabaseException(e); } long totalTime = System.currentTimeMillis() - time; logger.debug("Workflow query took {} ms", totalTime); return set; }
From source file:org.opencb.opencga.storage.core.search.solr.SolrQueryParser.java
License:Apache License
/** * Create a SolrQuery object from Query and QueryOptions. * * @param query Query/*from ww w . j a v a2 s .co m*/ * @param queryOptions Query Options * @return SolrQuery */ public SolrQuery parse(Query query, QueryOptions queryOptions) { List<String> filterList = new ArrayList<>(); SolrQuery solrQuery = new SolrQuery(); //------------------------------------- // QueryOptions processing //------------------------------------- if (queryOptions.containsKey(QueryOptions.INCLUDE)) { solrQuery.setFields(queryOptions.getAsStringList(QueryOptions.INCLUDE).toString()); } if (queryOptions.containsKey(QueryOptions.LIMIT)) { solrQuery.setRows(queryOptions.getInt(QueryOptions.LIMIT)); } if (queryOptions.containsKey(QueryOptions.SKIP)) { solrQuery.setStart(queryOptions.getInt(QueryOptions.SKIP)); } if (queryOptions.containsKey(QueryOptions.SORT)) { solrQuery.addSort(queryOptions.getString(QueryOptions.SORT), getSortOrder(queryOptions)); } //------------------------------------- // Query processing //------------------------------------- // OR conditions // create a list for xrefs (without genes), genes, regions and cts // the function classifyIds function differentiates xrefs from genes List<String> xrefs = new ArrayList<>(); List<String> genes = new ArrayList<>(); List<Region> regions = new ArrayList<>(); List<String> consequenceTypes = new ArrayList<>(); // xref classifyIds(VariantQueryParams.ANNOT_XREF.key(), query, xrefs, genes); classifyIds(VariantQueryParams.ID.key(), query, xrefs, genes); classifyIds(VariantQueryParams.GENE.key(), query, xrefs, genes); classifyIds(VariantQueryParams.ANNOT_CLINVAR.key(), query, xrefs, genes); classifyIds(VariantQueryParams.ANNOT_COSMIC.key(), query, xrefs, genes); // classifyIds(VariantQueryParams.ANNOT_HPO.key(), query, xrefs, genes); // Convert region string to region objects if (query.containsKey(VariantQueryParams.REGION.key())) { regions = Region.parseRegions(query.getString(VariantQueryParams.REGION.key())); } // consequence types (cts) if (query.containsKey(VariantQueryParams.ANNOT_CONSEQUENCE_TYPE.key()) && StringUtils.isNotEmpty(query.getString(VariantQueryParams.ANNOT_CONSEQUENCE_TYPE.key()))) { consequenceTypes = Arrays .asList(query.getString(VariantQueryParams.ANNOT_CONSEQUENCE_TYPE.key()).split("[,;]")); } // goal: [((xrefs OR regions) AND cts) OR (genes AND cts)] AND ... AND ... if (consequenceTypes.size() > 0) { if (genes.size() > 0) { // consequence types and genes String or = buildXrefOrRegionAndConsequenceType(xrefs, regions, consequenceTypes); if (xrefs.size() == 0 && regions.size() == 0) { // no xrefs or regions: genes AND cts filterList.add(buildGeneAndCt(genes, consequenceTypes)); } else { // otherwise: [((xrefs OR regions) AND cts) OR (genes AND cts)] filterList.add("(" + or + ") OR (" + buildGeneAndCt(genes, consequenceTypes) + ")"); } } else { // consequence types but no genes: (xrefs OR regions) AND cts // in this case, the resulting string will never be null, because there are some consequence types!! filterList.add(buildXrefOrRegionAndConsequenceType(xrefs, regions, consequenceTypes)); } } else { // no consequence types: (xrefs OR regions) but we must add "OR genes", i.e.: xrefs OR regions OR genes // no consequence types: (xrefs OR regions) but we must add "OR genMINes", i.e.: xrefs OR regions OR genes // we must make an OR with xrefs, genes and regions and add it to the "AND" filter list String orXrefs = buildXrefOrGeneOrRegion(xrefs, genes, regions); if (!orXrefs.isEmpty()) { filterList.add(orXrefs); } } // now we continue with the other AND conditions... // type (t) String key = VariantQueryParams.STUDIES.key(); if (isValidParam(query, VariantQueryParams.STUDIES)) { try { String value = query.getString(key); VariantDBAdaptorUtils.QueryOperation op = checkOperator(value); Set<Integer> studyIds = new HashSet<>( variantDBAdaptorUtils.getStudyIds(splitValue(value, op), queryOptions)); List<String> studyNames = new ArrayList<>(studyIds.size()); Map<String, Integer> map = variantDBAdaptorUtils.getStudyConfigurationManager().getStudies(null); if (map != null && map.size() > 1) { map.forEach((name, id) -> { if (studyIds.contains(id)) { String[] s = name.split(":"); studyNames.add(s[s.length - 1]); } }); if (op == null || op == VariantDBAdaptorUtils.QueryOperation.OR) { filterList.add(parseCategoryTermValue("studies", StringUtils.join(studyNames, ","))); } else { filterList.add(parseCategoryTermValue("studies", StringUtils.join(studyNames, ";"))); } } } catch (NullPointerException e) { logger.error(e.getMessage()); e.printStackTrace(); } } // type (t) key = VariantQueryParams.TYPE.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseCategoryTermValue("type", query.getString(key))); } // Gene biotype key = VariantQueryParams.ANNOT_BIOTYPE.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseCategoryTermValue("biotypes", query.getString(key))); } // protein-substitution key = VariantQueryParams.ANNOT_PROTEIN_SUBSTITUTION.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseScoreValue(query.getString(key))); } // conservation key = VariantQueryParams.ANNOT_CONSERVATION.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseScoreValue(query.getString(key))); } // cadd, functional score key = VariantQueryParams.ANNOT_FUNCTIONAL_SCORE.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseScoreValue(query.getString(key))); } // maf population frequency // in the model: "popFreq__1kG_phase3__CLM":0.005319148767739534 key = VariantQueryParams.ANNOT_POPULATION_MINOR_ALLELE_FREQUENCY.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parsePopValue("popFreq", query.getString(key))); } // stats maf // in the model: "stats__1kg_phase3__ALL"=0.02 key = VariantQueryParams.STATS_MAF.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parsePopValue("stats", query.getString(key))); } // GO key = VariantQueryParams.ANNOT_GO.key(); if (StringUtils.isNotEmpty(query.getString(key))) { List<String> gos = Arrays.asList(query.getString(key).split(",")); Set genesByGo = variantDBAdaptorUtils.getGenesByGo(gos); if (genesByGo != null && genesByGo.size() > 0) { filterList.add(parseCategoryTermValue("xrefs", StringUtils.join(genesByGo, ","))); } } // hpo key = VariantQueryParams.ANNOT_HPO.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseCategoryTermValue("traits", query.getString(key))); } // clinvar key = VariantQueryParams.ANNOT_CLINVAR.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseCategoryTermValue("traits", query.getString(key))); } // traits key = VariantQueryParams.ANNOT_TRAITS.key(); if (StringUtils.isNotEmpty(query.getString(key))) { filterList.add(parseCategoryTermValue("traits", query.getString(key))); } //------------------------------------- // Facet processing //------------------------------------- if (query.containsKey("facet.field")) { solrQuery.addFacetField((query.get("facet.field").toString())); } if (query.containsKey("facet.fields")) { solrQuery.addFacetField((query.get("facet.fields").toString().split(","))); } if (query.containsKey("facet.query")) { solrQuery.addFacetQuery(query.get("facet.query").toString()); } if (query.containsKey("facet.prefix")) { solrQuery.setFacetPrefix(query.get("facet.prefix").toString()); } if (query.containsKey("facet.range")) { Map<String, Map<String, Number>> rangeFields = (Map<String, Map<String, Number>>) query .get("facet.range"); for (String k : rangeFields.keySet()) { Number rangeStart = rangeFields.get(k).get("facet.range.start"); Number rangeEnd = rangeFields.get(k).get("facet.range.end"); Number rangeGap = rangeFields.get(k).get("facet.range.gap"); solrQuery.addNumericRangeFacet(k, rangeStart, rangeEnd, rangeGap); } } logger.debug("query = {}\n", query.toJson()); solrQuery.setQuery("*:*"); filterList.forEach(filter -> { solrQuery.addFilterQuery(filter); logger.debug("Solr fq: {}\n", filter); }); return solrQuery; }
From source file:org.opencommercesearch.RuleManager.java
License:Apache License
/** * Loads the rules that matches the given query * // w w w . ja v a2 s . c om * @param q is the user query * @param categoryPath is the current category path, used to filter out rules (i.e. rule based pages) * @param categoryFilterQuery is the current category search token that will be used for filtering out rules and facets * @param isSearch indicates if we are browsing or searching the site * @param isRuleBasedPage tells whether or not we are on a rule based page * @param catalog the current catalog we are browsing/searching * @param isOutletPage tells whether or not the current page is outlet * @param brandId is the current brand id currently browsed, if any. * @throws RepositoryException if an exception happens retrieving a rule from the repository * @throws SolrServerException if an exception happens querying the search engine */ void loadRules(String q, String categoryPath, String categoryFilterQuery, boolean isSearch, boolean isRuleBasedPage, RepositoryItem catalog, boolean isOutletPage, String brandId, Set<String> includeExperiments, Set<String> excludeExperiments) throws RepositoryException, SolrServerException { if (isSearch && StringUtils.isBlank(q)) { throw new IllegalArgumentException("Missing query"); } SolrQuery query = new SolrQuery("*:*"); query.setStart(DEFAULT_START); query.setRows(DEFAULT_ROWS); query.addSort(FIELD_SORT_PRIORITY, ORDER.asc); query.addSort(FIELD_SCORE, ORDER.asc); query.addSort(FIELD_ID, ORDER.asc); query.add(CommonParams.FL, FIELD_ID, FIELD_BOOST_FUNCTION, FIELD_FACET_FIELD, FIELD_COMBINE_MODE, FIELD_QUERY, FIELD_CATEGORY, FIELD_EXPERIMENTAL); StringBuilder reusableStringBuilder = new StringBuilder(); query.addFilterQuery(getTargetFilter(reusableStringBuilder, isSearch, q)); query.addFilterQuery(getCategoryFilter(reusableStringBuilder, categoryFilterQuery, categoryPath)); query.addFilterQuery(getSiteFilter(reusableStringBuilder, catalog)); query.addFilterQuery(getBrandFilter(reusableStringBuilder, brandId)); query.addFilterQuery(getSubTargetFilter(reusableStringBuilder, isOutletPage)); StringBuilder catalogFilter = reuseStringBuilder(reusableStringBuilder); catalogFilter.append("catalogId:").append(WILDCARD).append(" OR ").append("catalogId:") .append(catalog.getRepositoryId()); query.addFilterQuery(catalogFilter.toString()); //Notice how the current datetime (NOW wildcard on Solr) is rounded to days (NOW/DAY). This allows filter caches //to be reused and hopefully improve performance. If you don't round to day, NOW is very precise (up to milliseconds); so every query //would need a new entry on the filter cache... //Also, notice that NOW/DAY is midnight from last night, and NOW/DAY+1DAY is midnight today. //The below query is intended to match rules with null start or end dates, or start and end dates in the proper range. query.addFilterQuery( "-(((startDate:[* TO *]) AND -(startDate:[* TO NOW/DAY+1DAY])) OR (endDate:[* TO *] AND -endDate:[NOW/DAY+1DAY TO *]))"); int queryTime = 0; QueryResponse res = server.query(query); queryTime += res.getQTime(); if (res.getResults() == null || res.getResults().getNumFound() == 0) { rules = Collections.emptyMap(); loadRulesTime = queryTime; return; } rules = new HashMap<String, List<RepositoryItem>>(RuleType.values().length); ruleDocs = new HashMap<String, SolrDocument>(); SolrDocumentList docs = res.getResults(); int total = (int) docs.getNumFound(); int processed = 0; while (processed < total) { for (int i = 0; i < docs.size(); i++) { ++processed; SolrDocument doc = docs.get(i); if (isSearch && !matchesQuery(q, doc)) { // skip this rule continue; } RepositoryItem rule = searchRepository.getItem((String) doc.getFieldValue("id"), SearchRepositoryItemDescriptor.RULE); //for rule based categories, include all facet rules and ranking rules of only that category if (rule != null) { if (excludeExperiments.contains(rule.getRepositoryId())) { continue; } Boolean experimental = (Boolean) doc.getFieldValue(FIELD_EXPERIMENTAL); if (experimental != null && experimental && !includeExperiments.contains(rule.getRepositoryId())) { continue; } String ruleType = (String) rule.getPropertyValue(RuleProperty.RULE_TYPE); if (ruleType.equals(RuleProperty.TYPE_FACET_RULE)) { buildRuleLists(ruleType, rule, doc); } else { if (categoryPath != null && isRuleBasedPage) { List<String> ruleCategories = (List<String>) doc.getFieldValue(FIELD_CATEGORY); if (ruleCategories != null) { if (ruleCategories.contains(categoryPath)) { buildRuleLists(ruleType, rule, doc); } } } else { buildRuleLists(ruleType, rule, doc); } } } else { //TODO gsegura: add logging that we couldn't find the rule item in the DB } } if (processed < total) { query.setStart(processed); res = server.query(query); queryTime += res.getQTime(); docs = res.getResults(); } } loadRulesTime = queryTime; }
From source file:org.opengeoportal.harvester.api.client.solr.SolrSearchParams.java
License:Open Source License
/** * Transform the record in {@link SolrQuery} executable by an * {@link org.apache.solr.client.solrj.impl.HttpSolrServer}. * // www . j av a2 s. c o m * @return the {@link SolrQuery} built with the data page this. */ public SolrQuery toSolrQuery() { SolrQuery solrQuery = new SolrQuery(); if (StringUtils.isNotBlank(customSolrQuery)) { solrQuery.setQuery(customSolrQuery); } else { solrQuery.setQuery("*:*"); // data repositories if (dataRepositories != null && dataRepositories.size() > 0) { Criteria institutionCriteria = null; for (String institution : dataRepositories) { if (institutionCriteria == null) { institutionCriteria = new Criteria(SolrRecord.INSTITUTION).is(institution); } else { institutionCriteria = institutionCriteria .or(new Criteria(SolrRecord.INSTITUTION).is(institution)); } } SimpleQuery query = new SimpleQuery(institutionCriteria); DefaultQueryParser parser = new DefaultQueryParser(); String queryString = parser.getQueryString(query); solrQuery.addFilterQuery(queryString); } else { solrQuery.addFilterQuery(SolrRecord.INSTITUTION + ":*"); } // theme keywords if (StringUtils.isNotBlank(themeKeyword)) { solrQuery.addFilterQuery(SolrRecord.THEME_KEYWORDS + ":" + themeKeyword); solrQuery.add(PF, SolrRecord.THEME_KEYWORDS + ":'" + themeKeyword + "'^9.0"); solrQuery.add(PF, SolrRecord.LAYER_DISPLAY_NAME + ":'" + themeKeyword + "'^9.0"); } if (StringUtils.isNotBlank(placeKeyword)) { solrQuery.addFilterQuery(SolrRecord.PLACE_KEYWORDS + ":" + placeKeyword); solrQuery.add(PF, SolrRecord.PLACE_KEYWORDS + ":'" + placeKeyword + "'^9.0"); } if (StringUtils.isNotBlank(topicCategory)) { solrQuery.addFilterQuery(SolrRecord.ISO_TOPIC_CATEGORY + ":" + this.topicCategory); } if (dateFrom != null || dateTo != null) { Criteria contentDateCriteria = Criteria.where(SolrRecord.CONTENT_DATE).between(dateFrom, dateTo); SimpleQuery query = new SimpleQuery(contentDateCriteria); DefaultQueryParser parser = new DefaultQueryParser(); String queryString = parser.getQueryString(query); solrQuery.addFilterQuery(queryString); } if (StringUtils.isNotBlank(originator)) { String originatorCriteria = splitAndConcatenateUsingOperator(Operator.AND, SolrRecord.ORIGINATOR, originator); solrQuery.addFilterQuery(originatorCriteria); solrQuery.add(PF, SolrRecord.ORIGINATOR + ":" + originator); } if (dataTypes != null && dataTypes.size() > 0) { StringBuilder concatenatedType = new StringBuilder(); for (DataType dType : dataTypes) { concatenatedType.append(dType.toString().replace(" ", "+")).append(" "); } String dataTypeCriteria = splitAndConcatenateUsingOperator(Operator.OR, SolrRecord.DATA_TYPE, concatenatedType.toString()); solrQuery.add("fq", dataTypeCriteria); } if (excludeRestrictedData) { solrQuery.addFilterQuery(SolrRecord.ACCESS + ":" + AccessLevel.Public); } if (fromSolrTimestamp != null || toSolrTimestamp != null) { Criteria solrTimestampCriteria = Criteria.where(SolrRecord.TIMESTAMP).between(fromSolrTimestamp, toSolrTimestamp); SimpleQuery query = new SimpleQuery(solrTimestampCriteria); DefaultQueryParser parser = new DefaultQueryParser(); String queryString = parser.getQueryString(query); solrQuery.addFilterQuery(queryString); } // Add bbox filter only if user has not specified a custom solr // query. buildBoundigBoxQuery(solrQuery); String synonymsFilter = generateSynonymsQuery(); if (StringUtils.isNotBlank(synonymsFilter)) { solrQuery.addFilterQuery(synonymsFilter); } } solrQuery.setRows(pageSize); solrQuery.setStart(page * pageSize); solrQuery.addSort(SortClause.desc("score")); return solrQuery; }
From source file:org.openjena.sarq.SolrServer.java
License:Apache License
public Iterator<SolrDocument> search(String queryString) { SolrQuery solrQuery = new SolrQuery(queryString); solrQuery.setRows(Integer.MAX_VALUE); solrQuery.setStart(0); solrQuery.setFields("*", "score"); try {/* ww w . ja v a 2 s.com*/ QueryResponse response = null; if (server != null) { response = server.query(solrQuery, SolrRequest.METHOD.GET); } else { response = queryServer.query(solrQuery, SolrRequest.METHOD.GET); } return response.getResults().iterator(); } catch (SolrServerException e) { throw new SARQException(e.getMessage(), e); } }
From source file:org.openmrs.module.chartsearch.solr.ChartSearchSearcher.java
License:Mozilla Public License
public List<ChartListItem> getDocumentList(Integer patientId, String searchText, Integer start, Integer length, List<String> selectedCategories) throws Exception { SolrServer solrServer = SolrSingleton.getInstance().getServer(); SolrQuery query = new SolrQuery(); List<ChartListItem> list = new ArrayList<ChartListItem>(); ChartSearchNonFacetFiltering nonFaceting = new ChartSearchNonFacetFiltering(); searchText = StringUtils.isNotBlank(searchText) ? searchText : "*"; //check for existence of characters such as ", and : in the search text and submit as it is if so if (searchText.contains("\"")) { String searchWhole = "text:" + searchText; query.setQuery(searchWhole);//w ww . j a v a 2s. c o m } else if (searchText.contains(":")) { query.setQuery(searchText); } else if (searchText.equals("*")) { query.setQuery(String.format("text:(%s)", searchText)); } else { ChartSearchSyntax searchSyntax = new ChartSearchSyntax(searchText); searchText = searchSyntax.getSearchQuery(); if (StringUtils.isNumeric(searchText)) { //this allows 36 returning 36.* for numerics searchText = searchText + ".*" + " || " + searchText; } query.setQuery(String.format("text:(%s)", searchText)); } query.addFilterQuery(String.format("person_id:%d", patientId)); addSelectedFilterQueriesToQuery(query, selectedCategories); query.setStart(start); query.setRows(length); query.setHighlight(true).setHighlightSnippets(1).setHighlightSimplePre("<b>") .setHighlightSimplePost("</b>"); query.setParam("hl.fl", "text"); query.remove(FacetParams.FACET_FIELD); query.setFacet(true); //adding facet field for concept_class query.addFacetField("concept_class_name"); nonFaceting.applyNonFacetingLogicWhileSearching(patientId, searchText, selectedCategories, solrServer, query, list); return list; }
From source file:org.openmrs.module.solr.web.DWRChartSearchService.java
License:Open Source License
private SolrDocumentList getDocumentList(Integer patientId, String searchText, Integer start, Integer length) throws Exception { SolrQuery query = new SolrQuery("*" + searchText + "* AND person_id:" + patientId); query.setStart(start); query.setRows(length);// www. ja v a2 s . c o m QueryResponse response = SolrEngine.getInstance().getServer().query(query); return response.getResults(); }
From source file:org.orcid.persistence.dao.impl.SolrDaoImpl.java
License:Open Source License
@Override public OrcidSolrResults findByDocumentCriteria(String queryString, Integer start, Integer rows) { SolrQuery query = new SolrQuery(queryString).setFields(SCORE, ORCID, PUBLIC_PROFILE); if (start != null) query.setStart(start); if (rows != null) query.setRows(rows);//from w w w . j av a2s.c o m return querySolr(query); }