List of usage examples for org.apache.solr.client.solrj SolrQuery addFacetQuery
public SolrQuery addFacetQuery(String f)
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 av 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 (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.ofbiz.solr.SolrProductSearch.java
License:Apache License
/** * Runs a query on the Solr Search Engine and returns the results. * <p>/* w w w . ja v a2 s .com*/ * This function only returns an object of type QueryResponse, so it is probably not a good idea to call it directly from within the * groovy files (As a decent example on how to use it, however, use keywordSearch instead). */ public static Map<String, Object> runSolrQuery(DispatchContext dctx, Map<String, Object> context) { // get Connection HttpSolrServer server = null; Map<String, Object> result; Integer viewIndex = (Integer) context.get("viewIndex"); Integer viewSize = (Integer) context.get("viewSize"); if (viewIndex < 1) { viewIndex = 1; } try { server = new HttpSolrServer(SolrUtil.solrUrl); // create Query Object SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery((String) context.get("query")); // solrQuery.setQueryType("dismax"); boolean faceted = (Boolean) context.get("facet"); if (faceted) { solrQuery.setFacet(faceted); //solrQuery.addFacetField("manu"); solrQuery.addFacetField("features"); solrQuery.addFacetField("cat"); solrQuery.setFacetMinCount(1); solrQuery.setFacetLimit(8); solrQuery.addFacetQuery("listPrice:[0 TO 50]"); solrQuery.addFacetQuery("listPrice:[50 TO 100]"); solrQuery.addFacetQuery("listPrice:[100 TO 250]"); solrQuery.addFacetQuery("listPrice:[250 TO 500]"); solrQuery.addFacetQuery("listPrice:[500 TO 1000]"); solrQuery.addFacetQuery("listPrice:[1000 TO 2500]"); solrQuery.addFacetQuery("listPrice:[2500 TO 5000]"); solrQuery.addFacetQuery("listPrice:[5000 TO 10000]"); solrQuery.addFacetQuery("listPrice:[10000 TO 50000]"); solrQuery.addFacetQuery("listPrice:[50000 TO *]"); } boolean spellCheck = (Boolean) context.get("spellcheck"); if (spellCheck) { solrQuery.setParam("spellcheck", spellCheck); } boolean highLight = (Boolean) context.get("highlight"); if (highLight) { solrQuery.setHighlight(highLight); solrQuery.setHighlightSimplePre("<span class=\"highlight\">"); solrQuery.addHighlightField("description"); solrQuery.setHighlightSimplePost("</span>"); solrQuery.setHighlightSnippets(2); } // Set additional Parameter // SolrQuery.ORDER order = SolrQuery.ORDER.desc; if (viewIndex != null && viewIndex > 0) { solrQuery.setStart((viewIndex - 1) * viewSize); } if (viewSize != null && viewSize > 0) { solrQuery.setRows(viewSize); } // if ((List) context.get("queryFilter") != null && ((ArrayList<SolrDocument>) context.get("queryFilter")).size() > 0) { // List filter = (List) context.get("queryFilter"); // String[] tn = new String[filter.size()]; // Iterator it = filter.iterator(); // for (int i = 0; i < filter.size(); i++) { // tn[i] = (String) filter.get(i); // } // solrQuery.setFilterQueries(tn); // } String queryFilter = (String) context.get("queryFilter"); if (UtilValidate.isNotEmpty(queryFilter)) solrQuery.setFilterQueries(queryFilter.split(" ")); if ((String) context.get("returnFields") != null) { solrQuery.setFields((String) context.get("returnFields")); } // if((Boolean)context.get("sortByReverse"))order.reverse(); if ((String) context.get("sortBy") != null && ((String) context.get("sortBy")).length() > 0) { SolrQuery.ORDER order; if (!((Boolean) context.get("sortByReverse"))) order = SolrQuery.ORDER.asc; else order = SolrQuery.ORDER.desc; solrQuery.setSort(((String) context.get("sortBy")).replaceFirst("-", ""), order); } if ((String) context.get("facetQuery") != null) { solrQuery.addFacetQuery((String) context.get("facetQuery")); } QueryResponse rsp = server.query(solrQuery); result = ServiceUtil.returnSuccess(); result.put("queryResult", rsp); } catch (Exception e) { Debug.logError(e, e.getMessage(), module); result = ServiceUtil.returnError(e.toString()); } return result; }
From source file:org.opencastproject.workflow.impl.WorkflowServiceSolrIndex.java
License:Educational Community License
/** * {@inheritDoc}/*from w ww. ja v a 2 s.co m*/ * * @see org.opencastproject.workflow.impl.WorkflowServiceIndex#getStatistics() */ @Override public WorkflowStatistics getStatistics() throws WorkflowDatabaseException { long total = 0; long paused = 0; long failed = 0; long failing = 0; long instantiated = 0; long running = 0; long stopped = 0; long succeeded = 0; WorkflowStatistics stats = new WorkflowStatistics(); // Get all definitions and then query for the numbers and the current operation per definition try { String orgId = securityService.getOrganization().getId(); StringBuilder queryString = new StringBuilder().append(ORG_KEY).append(":") .append(escapeQueryChars(orgId)); appendSolrAuthFragment(queryString, WRITE_PERMISSION); SolrQuery solrQuery = new SolrQuery(queryString.toString()); solrQuery.addFacetField(WORKFLOW_DEFINITION_KEY); solrQuery.addFacetField(OPERATION_KEY); solrQuery.setFacetMinCount(0); solrQuery.setFacet(true); QueryResponse response = solrServer.query(solrQuery); FacetField templateFacet = response.getFacetField(WORKFLOW_DEFINITION_KEY); FacetField operationFacet = response.getFacetField(OPERATION_KEY); // For every template and every operation if (templateFacet != null && templateFacet.getValues() != null) { for (Count template : templateFacet.getValues()) { WorkflowDefinitionReport templateReport = new WorkflowDefinitionReport(); templateReport.setId(template.getName()); long templateTotal = 0; long templatePaused = 0; long templateFailed = 0; long templateFailing = 0; long templateInstantiated = 0; long templateRunning = 0; long templateStopped = 0; long templateSucceeded = 0; if (operationFacet != null && operationFacet.getValues() != null) { for (Count operation : operationFacet.getValues()) { OperationReport operationReport = new OperationReport(); operationReport.setId(operation.getName()); StringBuilder baseSolrQuery = new StringBuilder().append(ORG_KEY).append(":") .append(escapeQueryChars(orgId)); appendSolrAuthFragment(baseSolrQuery, WRITE_PERMISSION); solrQuery = new SolrQuery(baseSolrQuery.toString()); solrQuery.addFacetField(STATE_KEY); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.FAILED); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.FAILING); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.INSTANTIATED); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.PAUSED); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.RUNNING); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.STOPPED); solrQuery.addFacetQuery(STATE_KEY + ":" + WorkflowState.SUCCEEDED); solrQuery.addFilterQuery(WORKFLOW_DEFINITION_KEY + ":" + template.getName()); solrQuery.addFilterQuery(OPERATION_KEY + ":" + operation.getName()); solrQuery.setFacetMinCount(0); solrQuery.setFacet(true); response = solrServer.query(solrQuery); // Add the states FacetField stateFacet = response.getFacetField(STATE_KEY); for (Count stateValue : stateFacet.getValues()) { WorkflowState state = WorkflowState.valueOf(stateValue.getName().toUpperCase()); templateTotal += stateValue.getCount(); total += stateValue.getCount(); switch (state) { case FAILED: operationReport.setFailed(stateValue.getCount()); templateFailed += stateValue.getCount(); failed += stateValue.getCount(); break; case FAILING: operationReport.setFailing(stateValue.getCount()); templateFailing += stateValue.getCount(); failing += stateValue.getCount(); break; case INSTANTIATED: operationReport.setInstantiated(stateValue.getCount()); templateInstantiated += stateValue.getCount(); instantiated += stateValue.getCount(); break; case PAUSED: operationReport.setPaused(stateValue.getCount()); templatePaused += stateValue.getCount(); paused += stateValue.getCount(); break; case RUNNING: operationReport.setRunning(stateValue.getCount()); templateRunning += stateValue.getCount(); running += stateValue.getCount(); break; case STOPPED: operationReport.setStopped(stateValue.getCount()); templateStopped += stateValue.getCount(); stopped += stateValue.getCount(); break; case SUCCEEDED: operationReport.setFinished(stateValue.getCount()); templateSucceeded += stateValue.getCount(); succeeded += stateValue.getCount(); break; default: throw new IllegalStateException("State '" + state + "' is not handled"); } } templateReport.getOperations().add(operationReport); } } // Update the template statistics templateReport.setTotal(templateTotal); templateReport.setFailed(templateFailed); templateReport.setFailing(templateFailing); templateReport.setInstantiated(templateInstantiated); templateReport.setPaused(templatePaused); templateReport.setRunning(templateRunning); templateReport.setStopped(templateStopped); templateReport.setFinished(templateSucceeded); // Add the definition report to the statistics stats.getDefinitions().add(templateReport); } } } catch (SolrServerException e) { throw new WorkflowDatabaseException(e); } stats.setTotal(total); stats.setFailed(failed); stats.setFailing(failing); stats.setInstantiated(instantiated); stats.setPaused(paused); stats.setRunning(running); stats.setStopped(stopped); stats.setFinished(succeeded); return stats; }
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 www .ja v a 2 s . com * @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.opencms.search.solr.TestSolrSearch.java
License:Open Source License
/** * @throws Throwable if something goes wrong *///from www . java 2 s . c o m public void testAdvancedFacetting() throws Throwable { echo("Testing facet query count"); // creating the query: facet=true&facet.field=Title_exact&facet.mincount=1&facet.query=text:OpenCms&rows=0 SolrQuery query = new CmsSolrQuery(getCmsObject(), null); // facet=true query.setFacet(true); // facet.field=Title_exact query.addFacetField("Title_exact"); // facet.mincount=1 query.add("facet.mincount", "1"); // facet.query=text:OpenCms query.addFacetQuery("text:OpenCms"); // facet.query=Title_prop:OpenCms query.addFacetQuery("Title_prop:OpenCms"); // rows=0 query.setRows(new Integer(0)); CmsSolrIndex index = OpenCms.getSearchManager().getIndexSolr(AllTests.SOLR_ONLINE); CmsSolrResultList results = index.search(getCmsObject(), query); long facetTextCount = results.getFacetQuery().get("text:OpenCms").intValue(); long facetTitleCount = results.getFacetQuery().get("Title_prop:OpenCms").intValue(); echo("Found '" + results.getFacetField("Title_exact").getValueCount() + "' facets for the field \"Title_exact\" and '" + facetTextCount + "' of them containing the word: \"OpenCms\" in the field 'text' and '" + facetTitleCount + "' of them containing the word \"OpenCms\" in the field 'Title_prop!'"); query = new CmsSolrQuery(getCmsObject(), CmsRequestUtil.createParameterMap("q=text:OpenCms")); results = index.search(getCmsObject(), query); long numExpected = results.getNumFound(); assertEquals(numExpected, facetTextCount); echo("Great Solr works fine!"); }
From source file:org.pentaho.di.trans.steps.solrinput.SolrInput.java
License:Apache License
/** * Once the transformation starts executing, the processRow() method is called repeatedly * by PDI for as long as it returns true. To indicate that a step has finished processing rows * this method must call setOutputDone() and return false; * //w w w . j a v a 2 s.c om * Steps which process incoming rows typically call getRow() to read a single row from the * input stream, change or add row content, call putRow() to pass the changed row on * and return true. If getRow() returns null, no more rows are expected to come in, * and the processRow() implementation calls setOutputDone() and returns false to * indicate that it is done too. * * Steps which generate rows typically construct a new row Object[] using a call to * RowDataUtil.allocateRowData(numberOfFields), add row content, and call putRow() to * pass the new row on. Above process may happen in a loop to generate multiple rows, * at the end of which processRow() would call setOutputDone() and return false; * * @param smi the step meta interface containing the step settings * @param sdi the step data interface that should be used to store * * @return true to indicate that the function should be called again, false if the step is done */ public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { if (first) { first = false; // Create the output row meta-data data.outputRowMeta = new RowMeta(); meta.getFields(data.outputRowMeta, getStepname(), null, null, this, repository, metaStore); // For String to <type> conversions, we allocate a conversion meta data row as well... data.convertRowMeta = data.outputRowMeta.cloneToType(ValueMetaInterface.TYPE_STRING); // get real values boolean tryCursor = true; Integer startRecord = 0; Integer chunkRowSize = 20; String realURL = meta.getURL(); String realQ = meta.getQ(); String realSort = meta.getSort(); String realCursor = meta.getCursor(); String realFq = meta.getFq(); String realFl = meta.getFl(); String realFacetQuery = meta.getFacetQuery(); String realFacetField = meta.getFacetField(); /* Send and Get the report */ SolrQuery query = new SolrQuery(); query.set("rows", chunkRowSize); if (realQ != null && !realQ.equals("")) { query.set("q", realQ); } if (realSort != null && !realSort.equals("")) { query.set("sort", realSort); } else { tryCursor = false; } if (realCursor != null && !realCursor.equals("")) { if (realCursor.equals("No")) { tryCursor = false; } } if (realFl != null && !realFl.equals("")) { query.set("fl", realFl); } if (realFq != null && !realFq.equals("")) { query.set("fq", realFq); } if (realFacetField != null && !realFacetField.equals("")) { //TODO incorporate multiple facet fields at once //String[] facetFields = realFacetField.split("\\s*,\\s*"); //for(int i =0; i < facetFields.length; i++){ query.addFacetField(realFacetField); //} query.setFacet(true); query.setFacetLimit(-1); query.setFacetMinCount(0); query.setFacetSort("count"); query.set("rows", 0); tryCursor = false; data.facetRequested = true; } if (realFacetQuery != null && !realFacetQuery.equals("")) { query.addFacetQuery(realFacetQuery); } // You can't use "TimeAllowed" with "CursorMark" // The documentation says "Values <= 0 mean // no time restriction", so setting to 0. query.setTimeAllowed(0); HttpSolrServer solr = new HttpSolrServer(realURL); String cursorMark = CursorMarkParams.CURSOR_MARK_START; boolean done = false; QueryResponse rsp = null; while (!done) { if (tryCursor) { query.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); } else { query.setStart(startRecord); } try { rsp = solr.query(query); } catch (SolrServerException e) { e.printStackTrace(); } if (data.facetRequested) { data.facetCountName = rsp.getFacetFields().get(0).getName(); data.facetCounts = rsp.getFacetFields().get(0).getValues(); done = true; } else { SolrDocumentList theseDocs = rsp.getResults(); for (SolrDocument doc : theseDocs) { data.documentList.add(doc); } } if (tryCursor) { String nextCursorMark = rsp.getNextCursorMark(); if (cursorMark.equals(nextCursorMark)) { done = true; } else { cursorMark = nextCursorMark; } } else { startRecord = startRecord + chunkRowSize; if (startRecord >= rsp.getResults().getNumFound()) { done = true; } } } } Object[] outputRowData = null; try { if (data.facetRequested) { // get one row if we can if (data.facetCounts.size() - 1 < data.recordIndex) { setOutputDone(); return false; } FacetField.Count facetRecord = data.facetCounts.get(data.recordIndex); outputRowData = prepareFacetRecord(facetRecord); } else { // get one row if we can if (data.documentList.size() - 1 < data.recordIndex) { setOutputDone(); return false; } SolrDocument record = data.documentList.get(data.recordIndex); outputRowData = prepareRecord(record); } putRow(data.outputRowMeta, outputRowData); // copy row to output rowset(s); data.recordIndex++; return true; } catch (KettleException e) { boolean sendToErrorRow = false; String errorMessage = null; if (getStepMeta().isDoingErrorHandling()) { sendToErrorRow = true; errorMessage = e.toString(); } else { logError(BaseMessages.getString(PKG, "SolrInput.log.Exception", e.getMessage())); logError(Const.getStackTracker(e)); setErrors(1); stopAll(); setOutputDone(); // signal end to receiver(s) return false; } if (sendToErrorRow) { // Simply add this row to the error row putError(getInputRowMeta(), outputRowData, 1, errorMessage, null, "SolrInput001"); } } return true; }
From source file:org.pentaho.di.ui.trans.steps.solrinput.SolrInputDialog.java
License:Apache License
private void getFields() { try {/*from w ww .ja v a2s . co m*/ SolrInputMeta meta = new SolrInputMeta(); getInfo(meta); // clear the current fields grid wFields.removeAll(); // get real values boolean tryCursor = true; boolean facetRequested = false; Integer startRecord = 0; Integer chunkRowSize = 20; String realURL = transMeta.environmentSubstitute(meta.getURL()); String realQ = transMeta.environmentSubstitute(meta.getQ()); String realSort = transMeta.environmentSubstitute(meta.getSort()); String realCursor = transMeta.environmentSubstitute(meta.getCursor()); String realFq = transMeta.environmentSubstitute(meta.getFq()); String realFl = transMeta.environmentSubstitute(meta.getFl()); String realFacetQuery = transMeta.environmentSubstitute(meta.getFacetQuery()); String realFacetField = transMeta.environmentSubstitute(meta.getFacetField()); /* Send and Get the report */ SolrQuery query = new SolrQuery(); query.set("rows", chunkRowSize); if (realQ != null && !realQ.equals("")) { query.set("q", realQ); } if (realSort != null && !realSort.equals("")) { query.set("sort", realSort); } else { tryCursor = false; } if (realCursor != null && !realCursor.equals("")) { if (realCursor.equals("No")) { tryCursor = false; } } if (realFl != null && !realFl.equals("")) { query.set("fl", realFl); } if (realFq != null && !realFq.equals("")) { query.set("fq", realFq); } if (realFacetField != null && !realFacetField.equals("")) { //TODO incorporate multiple facet fields at once //String[] facetFields = realFacetField.split("\\s*,\\s*"); //for(int i =0; i < facetFields.length; i++){ query.addFacetField(realFacetField); //} query.setFacet(true); query.setFacetLimit(-1); query.setFacetMinCount(0); query.setFacetSort("count"); query.set("rows", 0); tryCursor = false; facetRequested = true; } if (realFacetQuery != null && !realFacetQuery.equals("")) { query.addFacetQuery(realFacetQuery); } // You can't use "TimeAllowed" with "CursorMark" // The documentation says "Values <= 0 mean // no time restriction", so setting to 0. query.setTimeAllowed(0); HttpSolrServer solr = new HttpSolrServer(realURL); String cursorMark = CursorMarkParams.CURSOR_MARK_START; boolean done = false; List<String> headerNames = new ArrayList<String>(); QueryResponse rsp = null; while (!done) { if (tryCursor) { query.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); } else { query.setStart(startRecord); } try { rsp = solr.query(query); } catch (SolrServerException e) { e.printStackTrace(); } if (facetRequested) { headerNames.add(rsp.getFacetFields().get(0).getName()); headerNames.add("count"); done = true; } else { SolrDocumentList docs = rsp.getResults(); for (SolrDocument doc : docs) { Collection<String> thisNamesArray = doc.getFieldNames(); String[] a = thisNamesArray.toArray(new String[thisNamesArray.size()]); for (int j = 0; j < a.length; j++) { if (!headerNames.contains(a[j])) { headerNames.add(a[j]); } } } } if (tryCursor) { String nextCursorMark = rsp.getNextCursorMark(); if (cursorMark.equals(nextCursorMark)) { done = true; } else { cursorMark = nextCursorMark; } } else { startRecord = startRecord + chunkRowSize; if (startRecord >= rsp.getResults().getNumFound()) { done = true; } } } getTableView().table.setItemCount(headerNames.size()); for (int j = 0; j < headerNames.size(); j++) { TableItem item = getTableView().table.getItem(j); item.setText(1, headerNames.get(j)); } wFields.removeEmptyRows(); wFields.setRowNums(); wFields.optWidth(true); getInput().setChanged(); } catch (Exception e) { new ErrorDialog(shell, BaseMessages.getString(PKG, "SolrInputMeta.ErrorRetrieveData.DialogTitle"), BaseMessages.getString(PKG, "SolrInputMeta.ErrorRetrieveData.DialogMessage"), e); } }
From source file:org.roda.core.index.utils.SolrUtils.java
private static void parseAndConfigureFacets(Facets facets, SolrQuery query) { if (facets != null) { query.setFacetSort(getSolrFacetParameterSortValue(FacetParameter.DEFAULT_SORT)); if (!"".equals(facets.getQuery())) { query.addFacetQuery(facets.getQuery()); }// ww w .ja v a 2s . c o m StringBuilder filterQuery = new StringBuilder(); for (Entry<String, FacetParameter> parameter : facets.getParameters().entrySet()) { FacetParameter facetParameter = parameter.getValue(); setSolrFacetParameterSort(query, facetParameter); if (facetParameter instanceof SimpleFacetParameter) { setQueryFacetParameter(query, (SimpleFacetParameter) facetParameter); appendValuesUsingOROperator(filterQuery, facetParameter.getName(), ((SimpleFacetParameter) facetParameter).getValues(), true); } else { LOGGER.error("Unsupported facet parameter class: {}", facetParameter.getClass().getName()); } } if (filterQuery.length() > 0) { query.addFilterQuery(filterQuery.toString()); LOGGER.trace("Query after defining facets: {}", query); } } }
From source file:org.rsc.liferay.solr.SolrIndexSearcher.java
License:Open Source License
protected Hits doSearch(SearchContext searchContext, Query query) throws Exception { SolrQuery solrQuery = translateQuery(searchContext.getCompanyId(), query, searchContext.getSorts(), searchContext.getStart(), searchContext.getEnd()); Map<String, Facet> facets = searchContext.getFacets(); for (Facet facet : facets.values()) { if (facet.isStatic()) { continue; }/*from w w w .j a v a2 s . c o m*/ FacetConfiguration facetConfiguration = facet.getFacetConfiguration(); if (facet instanceof RangeFacet) { solrQuery.addFacetField(facetConfiguration.getFieldName()); JSONObject dataJSONObject = facetConfiguration.getData(); JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges"); if (rangesJSONArray == null) { continue; } for (int i = 0; i < rangesJSONArray.length(); i++) { JSONObject rangeJSONObject = rangesJSONArray.getJSONObject(i); String range = rangeJSONObject.getString("range"); String facetQuery = facetConfiguration.getFieldName() + StringPool.COLON + range; solrQuery.addFacetQuery(facetQuery); } } else { solrQuery.addFacetField(facetConfiguration.getFieldName()); } String facetSort = FacetParams.FACET_SORT_COUNT; String order = facetConfiguration.getOrder(); if (order.equals("OrderValueAsc")) { facetSort = FacetParams.FACET_SORT_INDEX; } solrQuery.add("f." + facetConfiguration.getFieldName() + ".facet.sort", facetSort); } solrQuery.setFacetLimit(-1); QueryResponse queryResponse = _solrServer.query(solrQuery, METHOD.POST); boolean allResults = false; if (solrQuery.getRows() == 0) { allResults = true; } List<FacetField> facetFields = queryResponse.getFacetFields(); if (facetFields != null) { for (FacetField facetField : facetFields) { Facet facet = facets.get(facetField.getName()); FacetCollector facetCollector = null; if (facet instanceof RangeFacet) { facetCollector = new SolrFacetQueryCollector(facetField.getName(), queryResponse.getFacetQuery()); } else { facetCollector = new SolrFacetFieldCollector(facetField.getName(), facetField); } facet.setFacetCollector(facetCollector); } } return subset(solrQuery, query, query.getQueryConfig(), queryResponse, allResults); }
From source file:org.schedoscope.metascope.index.SolrQueryExecutor.java
License:Apache License
/** * Perform a query on the metascope solr index. Builds up the query string * from the given parameters and sends request to solr server * /*from ww w. ja v a 2s .c o m*/ * @param params * the parameters which are included in the filter query * @return a SolrQueryResult object containing the result of the query */ public SolrQueryResult query(Map<String, String> params) { SolrQuery query = new SolrQuery(); /* enable facetting */ query.setFacet(true); /* list of all filters; key: name to display, value: entity parameter */ List<SolrQueryParameter> filter = new ArrayList<SolrQueryParameter>(); /* list of partition filter */ List<SolrQueryParameter> partitionFilter = new ArrayList<SolrQueryParameter>(); /* * list of filter which have been set by the user (key = filtername, value = * list of selections) */ Map<String, List<String>> activeFilterValues = new HashMap<String, List<String>>(); /* * determine on which type is searched for (either 'Table' or 'Partition') */ String typeFilterValue = params.get(TYPE); filter.add(new SolrQueryParameter(FILTER_TYPE, TYPE, FilterType.EXCLUSIVE, FacetSort.COUNT)); if (typeFilterValue != null && typeFilterValue.equalsIgnoreCase(TYPE_PARTITION)) { typeFilterValue = TYPE_PARTITION; for (String parameter : fieldEntityService.findDistinctParameters()) { partitionFilter.add(new SolrQueryParameter("Parameter: " + parameter, parameter + "_s", FilterType.AND, FacetSort.INDEX)); } for (SolrQueryParameter pFilter : partitionFilter) { query.addFacetField(pFilter.getName()); query.add("f." + pFilter.getName() + ".facet.sort", "index"); String filterValue = params.get(pFilter.getName()); if (filterValue != null && !filterValue.isEmpty()) { query.addFilterQuery(pFilter.getName() + ":" + "(" + filterValue.replace(",", " AND ") + ")"); } } } else { typeFilterValue = TYPE_TABLE; } query.addFilterQuery("{!tag=" + TYPE + "}" + TYPE + ":" + typeFilterValue); query.addFacetField("{!ex=" + TYPE + "}" + TYPE); /* set solr search query parameter 'q' */ String searchQueryValue = params.get(URLUtil.SEARCH_QUERY_PARAM); if (searchQueryValue == null || searchQueryValue.isEmpty()) { searchQueryValue = "*"; query.setQuery(searchQueryValue); } else { String[] queryTerms = searchQueryValue.trim().split(" "); String queryTerm = ""; for (String term : queryTerms) { if (term.isEmpty()) { continue; } if (!queryTerm.isEmpty()) { queryTerm += " AND "; } queryTerm += "*" + term + "*"; } query.setQuery(queryTerm); query.setHighlight(true); query.setHighlightSimplePre("<b>"); query.setHighlightSimplePost("</b>"); query.setHighlightSnippets(100); query.set("hl.fl", "*"); } /* set the remaining filters */ for (SolrQueryParameter queryFilter : facetFields) { filter.add(queryFilter); String value = params.get(queryFilter.getName()); String filterQuery = ""; String facetField = ""; if (queryFilter.isExcludeFromFacet()) { if (value != null) { String[] multipleFilter = value.split(","); value = "("; for (int i = 0; i < multipleFilter.length; i++) { String filterValue = cleanseValue(multipleFilter[i]).replace(" ", "*"); value += "(" + filterValue + ")"; if (i < multipleFilter.length - 1) { value += " " + getOperator(queryFilter.getFilterType()) + " "; } } value += ")"; } filterQuery = "{!tag=" + queryFilter.getName() + "}" + queryFilter.getName() + ":" + value; facetField = "{!ex=" + queryFilter.getName() + "}" + queryFilter.getName(); } else { if (value != null) { String[] multipleFilter = value.split(","); value = "("; for (int i = 0; i < multipleFilter.length; i++) { String filterValue = cleanseValue(multipleFilter[i]).replace(" ", "*"); value += "(" + filterValue + ")"; if (i < multipleFilter.length - 1) { value += " " + getOperator(queryFilter.getFilterType()) + " "; } } value += ")"; } filterQuery = queryFilter.getName() + ":" + value; facetField = queryFilter.getName(); } if (value != null && !value.isEmpty()) { query.addFilterQuery(filterQuery); } query.addFacetField(facetField); if (queryFilter.getFacetSort().equals(FacetSort.INDEX)) { query.add("f." + queryFilter.getName() + ".facet.sort", "index"); } query.add("f." + queryFilter.getName() + ".facet.limit", "-1"); } /* set facet queries */ Map<String, String> facetQueryMap = new HashMap<String, String>(); long now = System.currentTimeMillis() / 1000; for (SolrFacetQuery solrFacetQuery : facetQueries) { for (SolrHourRange range : solrFacetQuery.getRanges()) { long from = range.getFrom() == Long.MAX_VALUE ? 0 : now - (range.getFrom() * 3600); String facetQueryString = solrFacetQuery.getName() + ":[" + from + " TO " + now + "]"; query.addFacetQuery("{!ex=" + solrFacetQuery.getName() + "}" + facetQueryString); facetQueryMap.put(solrFacetQuery.getName() + range.getName(), facetQueryString); } String value = params.get(solrFacetQuery.getName()); if (value != null) { String fq = "{!tag=" + solrFacetQuery.getName() + "}" + facetQueryMap.get(solrFacetQuery.getName() + value); query.addFilterQuery(fq); } } /* always sort the entities (for a deterministic view) */ query.setSort(ID, ORDER.asc); /* set pagination information */ int page = getPageParameter(params); int elements = getElementsParameter(params); query.setRows(elements); query.setStart((page - 1) * elements); /* execute the query */ QueryResponse queryResponse = null; try { queryResponse = solrClient.query(query); } catch (Exception e) { e.printStackTrace(); } SolrDocumentList list = queryResponse.getResults(); /* get table / view entities from local repository */ List<SolrQueryResultEntity> resultEntities = new LinkedList<SolrQueryResultEntity>(); String resultType = ""; for (SolrDocument solrDocument : list) { String id = (String) solrDocument.get(ID); if (typeFilterValue.equalsIgnoreCase(TYPE_PARTITION)) { if (!searchQueryValue.equals("*")) { resultEntities.add(new SolrQueryResultEntity(viewEntityService.findByUrlPath(id), queryResponse.getHighlighting().get(id))); } else { resultEntities.add(new SolrQueryResultEntity(viewEntityService.findByUrlPath(id))); } resultType = TYPE_PARTITION; } else if (typeFilterValue.equalsIgnoreCase(TYPE_TABLE)) { if (!searchQueryValue.equals("*")) { resultEntities.add(new SolrQueryResultEntity(tableEntityService.findByFqdn(id), queryResponse.getHighlighting().get(id))); } else { resultEntities.add(new SolrQueryResultEntity(tableEntityService.findByFqdn(id))); } } } if (resultType.isEmpty()) { resultType = TYPE_TABLE; } filter.addAll(partitionFilter); /* get the facet values and counts */ Map<String, List<SolrFacet>> facetValues = new HashMap<String, List<SolrFacet>>(); for (SolrQueryParameter f : filter) { if (!f.getName().equals(URLUtil.SEARCH_QUERY_PARAM)) { List<SolrFacet> values = new ArrayList<SolrFacet>(); FacetField facet = queryResponse.getFacetField(f.getName()); for (Count count : facet.getValues()) { values.add(new SolrFacet(count.getName(), count.getCount())); } facetValues.put(f.getName(), values); } } /* remove the type filter */ filter.remove(0); for (SolrFacetQuery solrFacetQuery : facetQueries) { filter.add(new SolrQueryParameter(solrFacetQuery.getDisplayName(), solrFacetQuery.getName(), FilterType.EXCLUSIVE)); List<SolrFacet> values = new ArrayList<SolrFacet>(); for (SolrHourRange range : solrFacetQuery.getRanges()) { long facetQueryCount = getFacetQueryCount(queryResponse, "{!ex=" + solrFacetQuery.getName() + "}" + facetQueryMap.get(solrFacetQuery.getName() + range.getName())); values.add(new SolrFacet(range.getName(), facetQueryCount)); } facetValues.put(solrFacetQuery.getName(), values); } /* get the active filter values which have been selected by the user */ addToActiveFilterValues(activeFilterValues, params, filter); /* build and return the result */ SolrQueryResult result = new SolrQueryResult().withResultEntities(resultEntities).withResultType(resultType) .withFilters(filter).withFacetValues(facetValues).withActiveFilterValues(activeFilterValues) .withSearchQuery(searchQueryValue).withPage(page).withElements(elements) .withTotalPages((int) Math.ceil(((double) list.getNumFound()) / elements)) .withTotalResults(list.getNumFound()); return result; }