List of usage examples for org.apache.solr.client.solrj SolrQuery setFacetMinCount
public SolrQuery setFacetMinCount(int cnt)
From source file:org.ambraproject.search.service.SolrSearchService.java
License:Apache License
private SolrQuery createJournalFacetQuery(String queryString, boolean useDismax) { SolrQuery query = new SolrQuery(queryString); query.setTimeAllowed(queryTimeout);//from w w w . ja v a2 s. c om query.setIncludeScore(false); query.setHighlight(false); query.setRows(0); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); if (useDismax) { query.set("defType", "dismax"); } query.addFacetField("cross_published_journal_key"); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterFullDocuments()); return query; }
From source file:org.ambraproject.search.service.SolrSearchService.java
License:Apache License
private SolrQuery createKeywordFacetQuery(String queryString) { SolrQuery query = new SolrQuery(); query.setTimeAllowed(queryTimeout);// w w w. j a v a 2 s . co m query.setIncludeScore(false); query.setHighlight(false); query.setRows(0); query.set("defType", "dismax"); query.set("qf", "doc_partial_body"); query.addFacetField("doc_partial_type"); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterPartialDocuments()); query.setQuery(queryString); return query; }
From source file:org.ambraproject.service.search.SolrSearchService.java
License:Apache License
private SolrQuery createQuery(String queryString, int startPage, int pageSize, boolean useDismax) { SolrQuery query = new SolrQuery(queryString); query.setTimeAllowed(queryTimeout);/*from ww w .ja v a2s.c om*/ query.setIncludeScore(true); // The relevance (of each results element) to the search terms. query.setHighlight(false); if (useDismax) { query.set("defType", "dismax"); } //TODO: Put The "options" from the "queryField" picklist into a config file. //This list matches the "options" from the "queryField" picklist on unformattedSearch.ftl, //without the "date" fields. query.setStart(startPage * pageSize); // Which results element to return first in this batch. query.setRows(pageSize); // The number of results elements to return. // request only fields that we need to display query.setFields("id", "score", "title_display", "publication_date", "eissn", "journal", "article_type", "author_display", "abstract", "abstract_primary_display", "striking_image", "figure_table_caption", "subject", "expression_of_concern", "retraction"); query.addFacetField("subject_facet"); query.addFacetField("author_facet"); query.addFacetField("editor_facet"); query.addFacetField("article_type_facet"); query.addFacetField("affiliate_facet"); query.set("facet.method", "fc"); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterFullDocuments()); return query; }
From source file:org.ambraproject.service.search.SolrSearchService.java
License:Apache License
private SolrQuery createFacetsQuery(String queryString, String field, boolean useDismax) { SolrQuery query = new SolrQuery(queryString); query.setTimeAllowed(queryTimeout);//w ww. j a v a 2 s . c o m query.setIncludeScore(false); query.setHighlight(false); query.setRows(0); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); if (useDismax) { query.set("defType", "dismax"); } query.addFacetField(field); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterFullDocuments()); return query; }
From source file:org.apache.drill.exec.store.solr.SolrClientAPIExec.java
License:Apache License
public QueryResponse getSolr4Docs(String solrServer, String solrCoreName, String uniqueKey, List<String> fields, Long solrDocFectCount, String cursorMark, StringBuilder filters, List<SolrAggrParam> solrAggrParams, List<SolrSortParam> solrSortParams, List<String> aggrFieldNames, boolean isGroup, boolean useFacetPivotFromGroupCount) { String solrUrl = solrServer;/*from w ww . ja va 2 s .c om*/ if (solrCoreName != null) { solrUrl = solrServer + solrCoreName; } SolrClient solrClient = new HttpSolrClient(solrUrl); String fieldStr = null; String[] fieldListArr = null; List<String> statsFieldList = Lists.newArrayList(); SolrQuery solrQuery = new SolrQuery().setTermsRegexFlag("case_insensitive").setQuery(uniqueKey + ":*") .setRows(0); if (filters.length() > 0) { solrQuery.setParam("fq", filters.toString()); SolrClientAPIExec.logger.debug("Filter query [ " + filters.toString() + " ]"); } if (!fields.isEmpty()) { fieldStr = Joiner.on(",").join(fields); solrQuery.setParam("fl", fieldStr); solrQuery.setRows(solrDocFectCount.intValue()); SolrClientAPIExec.logger.debug("Response field list [" + fieldStr + "]"); } // facet.pivot={!stats=s1}category,manufacturer // stats.field={!key=avg_price tag=s1 mean=true}price // stats.field={!tag=s1 min=true max=true}user_rating if (solrAggrParams != null && !solrAggrParams.isEmpty() && !useFacetPivotFromGroupCount) { solrQuery.setGetFieldStatistics(true); for (SolrAggrParam solrAggrParam : solrAggrParams) { String statsField = solrAggrParam.getFieldName(); if (!fields.contains(statsField)) { statsField = uniqueKey; } if (!statsFieldList.contains(statsField)) { statsFieldList.add(statsField); } fields.remove(statsField); } if (!fields.isEmpty()) { fieldListArr = fields.toArray(new String[fields.size()]); } for (String statsField : statsFieldList) { solrQuery.setGetFieldStatistics(statsField); SolrClientAPIExec.logger.debug("Adding stats field parameter.. [ " + statsField + " ]"); if (isGroup) { List<String> groupFields = Lists.newArrayList(); for (String aggrField : aggrFieldNames) { if (fields.contains(aggrField)) { groupFields.add(aggrField); } } SolrClientAPIExec.logger.debug("Adding stats facet parameters.. [ " + groupFields + " ]"); solrQuery.addStatsFieldFacets(statsField, groupFields.toArray(new String[groupFields.size()])); } } solrQuery.setRows(0); } else if (isGroup) { fieldListArr = fields.toArray(new String[fields.size()]); solrQuery.setFacet(true); if (fields.size() == 1) { solrQuery.addFacetField(fieldListArr); solrQuery.setFacetLimit(-1); } else { solrQuery.addFacetPivotField(Joiner.on(",").join(fields)); } solrQuery.setRows(0); solrQuery.setFacetMinCount(1); // solrQuery.set(GroupParams.GROUP, true); // solrQuery.set(GroupParams.GROUP_FIELD, fieldListArr); // solrQuery.set(GroupParams.GROUP_MAIN, true); // solrQuery.set(GroupParams.GROUP_FORMAT, "simple"); // solrQuery.set("group.ngroups", "true"); } if (!solrSortParams.isEmpty()) { for (SolrSortParam solrSortParam : solrSortParams) { String solrSortField = solrSortParam.getSortFieldName(); ORDER solrSortDir = solrSortParam.getSortDir(); solrQuery.addSort(solrSortField, solrSortDir); } } else { solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); solrQuery.setSort(SolrQuery.SortClause.desc(uniqueKey)); } QueryResponse rsp = null; try { SolrClientAPIExec.logger .info("Submitting Query :" + solrServer + "/select" + solrQuery.toQueryString()); rsp = solrClient.query(solrQuery); SolrClientAPIExec.logger.info("Response recieved from [ " + solrServer + " ] core [ " + solrCoreName + " ] in " + rsp.getQTime() + " MS."); } catch (SolrServerException | IOException e) { SolrClientAPIExec.logger .debug("Error occured while fetching results from solr server " + e.getMessage()); } finally { try { solrClient.close(); } catch (IOException e) { SolrClientAPIExec.logger .debug("Error occured while closing connection of solr server " + e.getMessage()); } } return rsp; }
From source file:org.apache.drill.exec.store.solr.SolrClientAPIExec.java
License:Apache License
public QueryResponse getSolrDocs(String solrServer, String solrCoreName, String uniqueKey, List<String> fields, Long solrDocFectCount, String cursorMark, StringBuilder filters, List<SolrAggrParam> solrAggrParams, List<SolrSortParam> solrSortParams, List<String> aggrFieldNames, boolean isGroup, boolean isCountOnlyQuery) { String solrUrl = solrServer;/*from ww w .j a v a2 s .co m*/ if (solrCoreName != null) { solrUrl = solrServer + solrCoreName; } SolrClient solrClient = new HttpSolrClient(solrUrl); String fieldStr = null; String[] fieldListArr = null; List<String> statsFieldList = Lists.newArrayList(); SolrQuery solrQuery = new SolrQuery().setQuery("{!cache=false}" + uniqueKey + ":*").setRows(0); if (filters.length() > 0) { solrQuery.setParam("fq", filters.toString()); SolrClientAPIExec.logger.debug("Filter query [ " + filters.toString() + " ]"); } if (!fields.isEmpty()) { fieldStr = Joiner.on(",").join(fields); solrQuery.setParam("fl", fieldStr); solrQuery.setRows(solrDocFectCount.intValue()); SolrClientAPIExec.logger.debug("Response field list [" + fieldStr + "]"); } if (solrAggrParams != null && !solrAggrParams.isEmpty() && !isCountOnlyQuery) { solrQuery.setGetFieldStatistics(true); String referenceToStatsTag = "{!stats=t1}"; String statsTag = "{!tag=t1}"; for (SolrAggrParam solrAggrParam : solrAggrParams) { String statsField = solrAggrParam.getFieldName(); if (!fields.contains(statsField)) { statsField = uniqueKey; } if (!statsFieldList.contains(statsField)) { statsFieldList.add(statsField); } fields.remove(statsField); } if (!fields.isEmpty()) { fieldListArr = fields.toArray(new String[fields.size()]); } SolrClientAPIExec.logger.debug("Adding stats field parameter.." + statsFieldList + ""); if (isGroup) { List<String> groupFields = Lists.newArrayList(); solrQuery.addGetFieldStatistics(statsTag + Joiner.on(",").join(statsFieldList)); for (String aggrField : fields) { if (fields.contains(aggrField)) { groupFields.add(aggrField); } } if (groupFields.size() == 1) { SolrClientAPIExec.logger.debug("Adding stats facet parameters.." + groupFields + ""); for (String statsField : statsFieldList) { solrQuery.addStatsFieldFacets(statsField, groupFields.toArray(new String[groupFields.size()])); } } else { SolrClientAPIExec.logger.debug("Adding facet pivot parameters.." + groupFields + ""); solrQuery.addFacetPivotField(referenceToStatsTag + Joiner.on(",").join(groupFields)); solrQuery.setFacetLimit(-1); } } else { for (String statsField : statsFieldList) { solrQuery.setGetFieldStatistics(statsField); } } solrQuery.setRows(0); } else if (isGroup) { fieldListArr = fields.toArray(new String[fields.size()]); solrQuery.setFacet(true); if (fields.size() == 1) { solrQuery.addFacetField(fieldListArr); solrQuery.setFacetLimit(-1); } else { solrQuery.addFacetPivotField(Joiner.on(",").join(fields)); } solrQuery.setRows(0); solrQuery.setFacetMinCount(1); solrQuery.setFacetLimit(-1); } else { solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); solrQuery.addSort(SolrQuery.SortClause.desc(uniqueKey)); } if (!solrSortParams.isEmpty()) { for (SolrSortParam solrSortParam : solrSortParams) { String solrSortField = solrSortParam.getSortFieldName(); ORDER solrSortDir = solrSortParam.getSortDir(); solrQuery.addSort(solrSortField, solrSortDir); } } QueryResponse rsp = null; try { SolrClientAPIExec.logger.info("Submitting Query :" + solrUrl + "/select" + solrQuery.toQueryString()); rsp = solrClient.query(solrQuery); SolrClientAPIExec.logger.info("Response recieved from [ " + solrServer + " ] core [ " + solrCoreName + " ] in " + rsp.getQTime() + " MS."); } catch (SolrServerException | IOException e) { SolrClientAPIExec.logger .debug("Error occured while fetching results from solr server " + e.getMessage()); } finally { try { solrClient.close(); } catch (IOException e) { SolrClientAPIExec.logger .debug("Error occured while closing connection of solr server " + e.getMessage()); } } return rsp; }
From source file:org.apache.jackrabbit.oak.plugins.index.solr.query.FilterQueryParser.java
License:Apache License
static SolrQuery getQuery(Filter filter, QueryIndex.IndexPlan plan, OakSolrConfiguration configuration) { SolrQuery solrQuery = new SolrQuery(); setDefaults(solrQuery, configuration); StringBuilder queryBuilder = new StringBuilder(); FullTextExpression ft = filter.getFullTextConstraint(); if (ft != null) { queryBuilder.append(parseFullTextExpression(ft, configuration)); queryBuilder.append(' '); } else if (filter.getFulltextConditions() != null) { Collection<String> fulltextConditions = filter.getFulltextConditions(); for (String fulltextCondition : fulltextConditions) { queryBuilder.append(fulltextCondition).append(" "); }// w w w . j a va 2s .c o m } List<QueryIndex.OrderEntry> sortOrder = plan.getSortOrder(); if (sortOrder != null) { for (QueryIndex.OrderEntry orderEntry : sortOrder) { SolrQuery.ORDER order; if (QueryIndex.OrderEntry.Order.ASCENDING.equals(orderEntry.getOrder())) { order = SolrQuery.ORDER.asc; } else { order = SolrQuery.ORDER.desc; } String sortingField; if (JcrConstants.JCR_PATH.equals(orderEntry.getPropertyName())) { sortingField = partialEscape(configuration.getPathField()).toString(); } else if (JcrConstants.JCR_SCORE.equals(orderEntry.getPropertyName())) { sortingField = "score"; } else { if (orderEntry.getPropertyName().indexOf('/') >= 0) { log.warn("cannot sort on relative properties, ignoring {} clause", orderEntry); continue; // sorting by relative properties not supported until index time aggregation is supported } sortingField = partialEscape( getSortingField(orderEntry.getPropertyType().tag(), orderEntry.getPropertyName())) .toString(); } solrQuery.addOrUpdateSort(sortingField, order); } } Collection<Filter.PropertyRestriction> propertyRestrictions = filter.getPropertyRestrictions(); if (propertyRestrictions != null && !propertyRestrictions.isEmpty()) { for (Filter.PropertyRestriction pr : propertyRestrictions) { if (pr.isNullRestriction()) { // can not use full "x is null" continue; } // facets if (QueryImpl.REP_FACET.equals(pr.propertyName)) { solrQuery.setFacetMinCount(1); solrQuery.setFacet(true); String value = pr.first.getValue(Type.STRING); solrQuery.addFacetField( value.substring(QueryImpl.REP_FACET.length() + 1, value.length() - 1) + "_facet"); } // native query support if (SolrQueryIndex.NATIVE_SOLR_QUERY.equals(pr.propertyName) || SolrQueryIndex.NATIVE_LUCENE_QUERY.equals(pr.propertyName)) { String nativeQueryString = String.valueOf(pr.first.getValue(pr.first.getType())); if (isSupportedHttpRequest(nativeQueryString)) { // pass through the native HTTP Solr request String requestHandlerString = nativeQueryString.substring(0, nativeQueryString.indexOf('?')); if (!"select".equals(requestHandlerString)) { if (requestHandlerString.charAt(0) != '/') { requestHandlerString = "/" + requestHandlerString; } solrQuery.setRequestHandler(requestHandlerString); } String parameterString = nativeQueryString.substring(nativeQueryString.indexOf('?') + 1); for (String param : parameterString.split("&")) { String[] kv = param.split("="); if (kv.length != 2) { throw new RuntimeException("Unparsable native HTTP Solr query"); } else { // more like this if ("/mlt".equals(requestHandlerString)) { if ("stream.body".equals(kv[0])) { kv[0] = "q"; String mltFlString = "mlt.fl="; int mltFlIndex = parameterString.indexOf(mltFlString); if (mltFlIndex > -1) { int beginIndex = mltFlIndex + mltFlString.length(); int endIndex = parameterString.indexOf('&', beginIndex); String fields; if (endIndex > beginIndex) { fields = parameterString.substring(beginIndex, endIndex); } else { fields = parameterString.substring(beginIndex); } kv[1] = "_query_:\"{!dismax qf=" + fields + " q.op=OR}" + kv[1] + "\""; } } if ("mlt.fl".equals(kv[0]) && ":path".equals(kv[1])) { // rep:similar passes the path of the node to find similar documents for in the :path // but needs its indexed content to find similar documents kv[1] = configuration.getCatchAllField(); } } if ("/spellcheck".equals(requestHandlerString)) { if ("term".equals(kv[0])) { kv[0] = "spellcheck.q"; } solrQuery.setParam("spellcheck", true); } if ("/suggest".equals(requestHandlerString)) { if ("term".equals(kv[0])) { kv[0] = "suggest.q"; } solrQuery.setParam("suggest", true); } solrQuery.setParam(kv[0], kv[1]); } } return solrQuery; } else { queryBuilder.append(nativeQueryString); } } else { if (SolrQueryIndex.isIgnoredProperty(pr, configuration)) { continue; } String first = null; if (pr.first != null) { first = partialEscape(String.valueOf(pr.first.getValue(pr.first.getType()))).toString(); } String last = null; if (pr.last != null) { last = partialEscape(String.valueOf(pr.last.getValue(pr.last.getType()))).toString(); } String prField = configuration.getFieldForPropertyRestriction(pr); CharSequence fieldName = partialEscape(prField != null ? prField : pr.propertyName); if ("jcr\\:path".equals(fieldName.toString())) { queryBuilder.append(configuration.getPathField()); queryBuilder.append(':'); queryBuilder.append(first); } else { if (pr.first != null && pr.last != null && pr.first.equals(pr.last)) { queryBuilder.append(fieldName).append(':'); queryBuilder.append(first); } else if (pr.first == null && pr.last == null) { if (!queryBuilder.toString().contains(fieldName + ":")) { queryBuilder.append(fieldName).append(':'); queryBuilder.append('*'); } } else if ((pr.first != null && pr.last == null) || (pr.last != null && pr.first == null) || (!pr.first.equals(pr.last))) { // TODO : need to check if this works for all field types (most likely not!) queryBuilder.append(fieldName).append(':'); queryBuilder.append(createRangeQuery(first, last, pr.firstIncluding, pr.lastIncluding)); } else if (pr.isLike) { // TODO : the current parameter substitution is not expected to work well queryBuilder.append(fieldName).append(':'); queryBuilder.append(partialEscape(String.valueOf(pr.first.getValue(pr.first.getType())) .replace('%', '*').replace('_', '?'))); } else { throw new RuntimeException("[unexpected!] not handled case"); } } } queryBuilder.append(" "); } } if (configuration.useForPrimaryTypes()) { String[] pts = filter.getPrimaryTypes().toArray(new String[filter.getPrimaryTypes().size()]); StringBuilder ptQueryBuilder = new StringBuilder(); for (int i = 0; i < pts.length; i++) { String pt = pts[i]; if (i == 0) { ptQueryBuilder.append("("); } if (i > 0 && i < pts.length) { ptQueryBuilder.append("OR "); } ptQueryBuilder.append("jcr\\:primaryType").append(':').append(partialEscape(pt)).append(" "); if (i == pts.length - 1) { ptQueryBuilder.append(")"); ptQueryBuilder.append(' '); } } solrQuery.addFilterQuery(ptQueryBuilder.toString()); } if (filter.getQueryStatement() != null && filter.getQueryStatement().contains(QueryImpl.REP_EXCERPT)) { if (!solrQuery.getHighlight()) { // enable highlighting solrQuery.setHighlight(true); // defaults solrQuery.set("hl.fl", "*"); solrQuery.set("hl.encoder", "html"); solrQuery.set("hl.mergeContiguous", true); solrQuery.setHighlightSimplePre("<strong>"); solrQuery.setHighlightSimplePost("</strong>"); } } if (configuration.useForPathRestrictions()) { Filter.PathRestriction pathRestriction = filter.getPathRestriction(); if (pathRestriction != null) { String path = purgePath(filter, plan.getPathPrefix()); String fieldName = configuration.getFieldForPathRestriction(pathRestriction); if (fieldName != null) { if (pathRestriction.equals(Filter.PathRestriction.ALL_CHILDREN)) { solrQuery.addFilterQuery(fieldName + ':' + path); } else { queryBuilder.append(fieldName); queryBuilder.append(':'); queryBuilder.append(path); } } } } if (configuration.collapseJcrContentNodes()) { solrQuery.addFilterQuery("{!collapse field=" + configuration.getCollapsedPathField() + " min=" + configuration.getPathDepthField() + " hint=top_fc nullPolicy=expand}"); } if (queryBuilder.length() == 0) { queryBuilder.append("*:*"); } String escapedQuery = queryBuilder.toString(); solrQuery.setQuery(escapedQuery); if (log.isDebugEnabled()) { log.debug("JCR query {} has been converted to Solr query {}", filter.getQueryStatement(), solrQuery.toString()); } return solrQuery; }
From source file:org.apache.ofbiz.solr.SolrProductSearch.java
License:Apache License
/** * Runs a query on the Solr Search Engine and returns the results. * <p>//from w w w. ja v a 2 s. c o m * 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 HttpSolrClient client = null; String solrIndexName = (String) context.get("indexName"); Map<String, Object> result; try { client = SolrUtil.getInstance().getHttpSolrClient(solrIndexName); // 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("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 (context.get("viewIndex") != null && (Integer) context.get("viewIndex") > 0) { solrQuery.setStart((Integer) context.get("viewIndex")); } if (context.get("viewSize") != null && (Integer) context.get("viewSize") > 0) { solrQuery.setRows((Integer) context.get("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 = client.query(solrQuery); result = ServiceUtil.returnSuccess(); result.put("queryResult", rsp); } catch (Exception e) { Debug.logError(e, e.getMessage(), module); result = ServiceUtil.returnError(e.toString()); } finally { if (client != null) { try { client.close(); } catch (IOException e) { // do nothing } } } return result; }
From source file:org.apache.ofbiz.solr.SolrUtil.java
License:Apache License
public static Map<String, Object> categoriesAvailable(String catalogId, String categoryId, String productId, String facetPrefix, boolean displayproducts, int viewIndex, int viewSize, String solrIndexName) { // create the data model Map<String, Object> result = new HashMap<String, Object>(); HttpSolrClient client = null;/*from ww w . j a v a 2s . com*/ QueryResponse returnMap = new QueryResponse(); try { // do the basic query client = getHttpSolrClient(solrIndexName); // create Query Object String query = "inStock[1 TO *]"; if (categoryId != null) query += " +cat:" + categoryId; else if (productId != null) query += " +productId:" + productId; SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery(query); if (catalogId != null) solrQuery.setFilterQueries("catalog:" + catalogId); if (displayproducts) { if (viewSize > -1) { solrQuery.setRows(viewSize); } else solrQuery.setRows(50000); if (viewIndex > -1) { solrQuery.setStart(viewIndex); } } else { solrQuery.setFields("cat"); solrQuery.setRows(0); } if (UtilValidate.isNotEmpty(facetPrefix)) { solrQuery.setFacetPrefix(facetPrefix); } solrQuery.setFacetMinCount(0); solrQuery.setFacet(true); solrQuery.addFacetField("cat"); solrQuery.setFacetLimit(-1); Debug.logVerbose("solr: solrQuery: " + solrQuery, module); returnMap = client.query(solrQuery, METHOD.POST); result.put("rows", returnMap); result.put("numFound", returnMap.getResults().getNumFound()); } catch (Exception e) { Debug.logError(e.getMessage(), module); } return result; }
From source file:org.codelibs.fess.service.SearchService.java
License:Apache License
public List<Map<String, Object>> getDocumentList(final String query, final int start, final int rows, final FacetInfo facetInfo, final GeoInfo geoInfo, final MoreLikeThisInfo mltInfo, final String[] responseFields, final String[] docValuesFields, final boolean forUser) { if (start > queryHelper.getMaxSearchResultOffset()) { throw new ResultOffsetExceededException("The number of result size is exceeded."); }/*from w w w .j a v a 2s .c o m*/ final long startTime = System.currentTimeMillis(); final SolrGroup solrGroup = solrGroupManager.getSolrGroup(QueryType.QUERY); QueryResponse queryResponse = null; final SolrQuery solrQuery = new SolrQuery(); final SearchQuery searchQuery = queryHelper.build(query, forUser); final String q = searchQuery.getQuery(); if (StringUtil.isNotBlank(q)) { // fields solrQuery.setFields(responseFields); // query solrQuery.setQuery(q); solrQuery.setStart(start); solrQuery.setRows(rows); solrQuery.set("mm", searchQuery.getMinimumShouldMatch()); solrQuery.set("defType", searchQuery.getDefType()); for (final Map.Entry<String, String[]> entry : queryHelper.getQueryParamMap().entrySet()) { solrQuery.set(entry.getKey(), entry.getValue()); } // filter query if (searchQuery.hasFilterQueries()) { solrQuery.addFilterQuery(searchQuery.getFilterQueries()); } // sort final SortField[] sortFields = searchQuery.getSortFields(); if (sortFields.length != 0) { for (final SortField sortField : sortFields) { solrQuery.addSort(sortField.getField(), Constants.DESC.equals(sortField.getOrder()) ? SolrQuery.ORDER.desc : SolrQuery.ORDER.asc); } } else if (queryHelper.hasDefaultSortFields()) { for (final SortField sortField : queryHelper.getDefaultSortFields()) { solrQuery.addSort(sortField.getField(), Constants.DESC.equals(sortField.getOrder()) ? SolrQuery.ORDER.desc : SolrQuery.ORDER.asc); } } // highlighting if (queryHelper.getHighlightingFields() != null && queryHelper.getHighlightingFields().length != 0) { for (final String hf : queryHelper.getHighlightingFields()) { solrQuery.addHighlightField(hf); } solrQuery.setHighlightSnippets(queryHelper.getHighlightSnippetSize()); } // shards if (queryHelper.getShards() != null) { solrQuery.setParam("shards", queryHelper.getShards()); } // geo if (geoInfo != null && geoInfo.isAvailable()) { solrQuery.addFilterQuery(geoInfo.toGeoQueryString()); final String additionalGeoQuery = queryHelper.getAdditionalGeoQuery(); if (StringUtil.isNotBlank(additionalGeoQuery)) { solrQuery.addFilterQuery(additionalGeoQuery); } } // facets if (facetInfo != null) { solrQuery.setFacet(true); if (facetInfo.field != null) { for (final String f : facetInfo.field) { if (queryHelper.isFacetField(f)) { solrQuery.addFacetField(f); } else { throw new FessSolrQueryException("EFESS0002", new Object[] { f }); } } } if (facetInfo.query != null) { for (final String fq : facetInfo.query) { final String facetQuery = queryHelper.buildFacetQuery(fq); if (StringUtil.isNotBlank(facetQuery)) { solrQuery.addFacetQuery(facetQuery); } else { throw new FessSolrQueryException("EFESS0003", new Object[] { fq, facetQuery }); } } } if (facetInfo.limit != null) { solrQuery.setFacetLimit(Integer.parseInt(facetInfo.limit)); } if (facetInfo.minCount != null) { solrQuery.setFacetMinCount(Integer.parseInt(facetInfo.minCount)); } if (facetInfo.missing != null) { solrQuery.setFacetMissing(Boolean.parseBoolean(facetInfo.missing)); } if (facetInfo.prefix != null) { solrQuery.setFacetPrefix(facetInfo.prefix); } if (facetInfo.sort != null && queryHelper.isFacetSortValue(facetInfo.sort)) { solrQuery.setFacetSort(facetInfo.sort); } } // mlt if (mltInfo != null) { final String mltField = queryHelper.getMoreLikeThisField(mltInfo.field); if (mltField != null) { solrQuery.set("mlt", true); if (mltInfo.count != null) { solrQuery.set("mlt.count", Integer.parseInt(mltInfo.count)); } solrQuery.set("mlt.fl", mltField); } } if (queryHelper.getTimeAllowed() >= 0) { solrQuery.setTimeAllowed(queryHelper.getTimeAllowed()); } final Set<Entry<String, String[]>> paramSet = queryHelper.getRequestParameterSet(); if (!paramSet.isEmpty()) { for (final Map.Entry<String, String[]> entry : paramSet) { solrQuery.set(entry.getKey(), entry.getValue()); } } if (docValuesFields != null) { for (final String docValuesField : docValuesFields) { solrQuery.add(Constants.DCF, docValuesField); } } queryResponse = solrGroup.query(solrQuery, SolrRequest.METHOD.POST); } final long execTime = System.currentTimeMillis() - startTime; final QueryResponseList queryResponseList = ComponentUtil.getQueryResponseList(); queryResponseList.init(queryResponse, rows); queryResponseList.setSearchQuery(q); queryResponseList.setSolrQuery(solrQuery.toString()); queryResponseList.setExecTime(execTime); return queryResponseList; }