List of usage examples for org.apache.solr.client.solrj SolrQuery addDateRangeFacet
public SolrQuery addDateRangeFacet(String field, Date start, Date end, String gap)
From source file:com.frank.search.solr.core.DefaultQueryParser.java
License:Apache License
private void appendFieldFacetingByDateRange(SolrQuery solrQuery, FieldWithDateRangeParameters field) { solrQuery.addDateRangeFacet( // field.getName(), // field.getStart(), // field.getEnd(), // field.getGap());/* w w w .j a v a2 s. c om*/ }
From source file:edu.vt.vbi.patric.cache.DataLandingGenerator.java
License:Apache License
private JSONObject getGenomeCounts() { JSONArray series = new JSONArray(); // TODO: reimplement with json facet using sub faceting SolrQuery queryComplete = new SolrQuery("genome_status:Complete"); SolrQuery queryWGS = new SolrQuery("genome_status:WGS"); queryComplete.setFacet(true).setRows(0).setFacetSort(FacetParams.FACET_SORT_INDEX); //.set("json.facet", "{genome_count:{range:{field:completion_date,start:\"2010-01-01T00:00:00.000Z\",end:\"2016-01-01T00:00:00.000Z\",gap:\"%2B1YEAR\",other:\"before\"}}}"); queryWGS.setFacet(true).setRows(0).setFacetSort(FacetParams.FACET_SORT_INDEX); //.set("json.facet", "{genome_count:{range:{field:completion_date,start:\"2010-01-01T00:00:00.000Z\",end:\"2016-01-01T00:00:00.000Z\",gap:\"%2B1YEAR\",other:\"before\"}}}"); try {//from w ww . j a va 2 s. com Date rangeStartDate = DateUtil.parseDate("2010-01-01'T'00:00:00.000'Z'"); Date rangeEndDate = DateUtil.parseDate("2016-01-01'T'00:00:00.000'Z'"); queryComplete.addDateRangeFacet("completion_date", rangeStartDate, rangeEndDate, "+1YEAR") .add(FacetParams.FACET_RANGE_OTHER, "before"); queryWGS.addDateRangeFacet("completion_date", rangeStartDate, rangeEndDate, "+1YEAR") .add(FacetParams.FACET_RANGE_OTHER, "before"); } catch (java.text.ParseException e) { LOGGER.error(e.getMessage(), e); } try { LOGGER.debug("getGenomeCount: [{}] {}", SolrCore.GENOME.getSolrCoreName(), queryComplete); String apiResponse = dataApi.solrQuery(SolrCore.GENOME, queryComplete); Map resp = jsonReader.readValue(apiResponse); Map completeFacets = (Map) ((Map) ((Map) resp.get("facet_counts")).get("facet_ranges")) .get("completion_date"); LOGGER.debug("getGenomeCount: [{}] {}", SolrCore.GENOME.getSolrCoreName(), queryWGS); apiResponse = dataApi.solrQuery(SolrCore.GENOME, queryWGS); resp = jsonReader.readValue(apiResponse); Map wgsFacets = (Map) ((Map) ((Map) resp.get("facet_counts")).get("facet_ranges")) .get("completion_date"); int countComplete = (Integer) completeFacets.get("before"); int countWGS = (Integer) wgsFacets.get("before"); Map<String, Integer> mapCountComplete = new HashMap<>(); Map<String, Integer> mapCountWGS = new HashMap<>(); List listComplete = (List) completeFacets.get("counts"); for (int i = 0; i < listComplete.size(); i = i + 2) { countComplete = countComplete + (Integer) listComplete.get(i + 1); mapCountComplete.put(((String) listComplete.get(i)).substring(0, 4), countComplete); } List listWGS = (List) wgsFacets.get("counts"); for (int i = 0; i < listWGS.size(); i = i + 2) { String year = ((String) listWGS.get(i)).substring(0, 4); countWGS = countWGS + (Integer) listWGS.get(i + 1); mapCountWGS.put(year, countWGS); JSONObject item = new JSONObject(); item.put("year", Integer.parseInt(year)); item.put("complete", mapCountComplete.get(year)); item.put("wgs", mapCountWGS.get(year)); series.add(item); } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } JSONObject jsonData = new JSONObject(); jsonData.put("chart_title", "Number of Bacterial Genomes"); jsonData.put("data", series); return jsonData; }
From source file:edu.vt.vbi.patric.common.DataApiHandler.java
License:Apache License
public SolrQuery buildSolrQuery(Map<String, String> key, String sorts, String facets, int start, int end, boolean highlight) { SolrQuery query = new SolrQuery(); SolrInterface solr = new SolrInterface(); // Processing key map query.setQuery(StringHelper.stripQuoteAndParseSolrKeywordOperator(key.get("keyword"))); if (key.containsKey("filter") && key.get("filter") != null) { query.addFilterQuery(key.get("filter")); }/*from www. j av a 2 s .com*/ if (key.containsKey("filter2") && key.get("filter2") != null) { query.addFilterQuery(key.get("filter2")); } // use SolrJoin if possible if (key.containsKey("join")) { query.addFilterQuery(key.get("join")); } if (key.containsKey("fields") && !key.get("fields").equals("")) { query.addField(key.get("fields")); } // sort conditions if (sorts != null && !sorts.equals("") && !sorts.equals("[]")) { try { JSONArray sorter = (JSONArray) new JSONParser().parse(sorts); for (Object aSort : sorter) { JSONObject jsonSort = (JSONObject) aSort; query.addSort(SolrQuery.SortClause.create(jsonSort.get("property").toString(), jsonSort.get("direction").toString().toLowerCase())); } } catch (ParseException e) { LOGGER.error(e.getMessage(), e); } } // facet conditions if (facets != null && !facets.equals("") && !facets.equals("{}")) { query.setFacet(true).setFacetMinCount(1).setFacetLimit(-1).setFacetSort(FacetParams.FACET_SORT_COUNT) .set("json.nl", "map"); try { JSONObject facetConditions = (JSONObject) new JSONParser().parse(facets); if (facetConditions.containsKey("facet.sort")) { String facetSort = facetConditions.get("facet.sort").toString(); if (facetSort.equals("index")) { query.setFacetSort(FacetParams.FACET_SORT_INDEX); } } if (facetConditions.containsKey("field_facets")) { String[] fieldFacets = facetConditions.get("field_facets").toString().split(","); query.addFacetField(fieldFacets); } if (facetConditions.containsKey("date_range_facets") && !facetConditions.get("date_range_facets").equals("")) { String[] dateRangeFacets = facetConditions.get("date_range_facets").toString().split(","); for (String field : dateRangeFacets) { query.addDateRangeFacet(field, solr.getRangeStartDate(), solr.getRangeEndDate(), solr.getRangeDate()); } } } catch (ParseException e) { LOGGER.error(e.getMessage(), e); } } // start & end query.setStart(start); // setting starting index if (end == -1) { query.setRows(MAX_ROWS); } else { query.setRows(end); } // highlight if (highlight) { query.set("hl", "on").set("hl.fl", "*"); } return query; }
From source file:edu.vt.vbi.patric.common.FacetHelper.java
License:Apache License
private static JSONObject getSingleFacetsData(DataApiHandler dataApi, SolrCore core, String keyword, String single_facet, String[] facets, String fq) throws IOException, ParseException { SolrInterface solr = new SolrInterface(); keyword = StringHelper.stripQuoteAndParseSolrKeywordOperator(keyword); int beginindex = keyword.indexOf(" AND (" + single_facet); int endindex = 0; StringBuffer s = new StringBuffer(keyword); if (beginindex < 0) { beginindex = keyword.indexOf("(" + single_facet); endindex = keyword.indexOf(") AND ", beginindex); if (endindex < 0) { endindex = keyword.indexOf("))", beginindex); // TODO: this cause java.lang.StringIndexOutOfBoundsException: String index out of range: -1 // when Patric Libs keyword - (*) and endindex: 2 LOGGER.debug("string:{}, beginIndex: {}, endIndex:{}", s, beginindex, endindex); if (endindex > 0) { s.delete(beginindex, endindex + 2); }//from ww w . j a v a 2s.c om } else { s.delete(beginindex, endindex + 6); } } else { endindex = keyword.indexOf("))", beginindex); if (endindex == -1) { endindex = keyword.indexOf("])", beginindex); } s.delete(beginindex, endindex + 2); } if (s.length() == 0) s.append("(*)"); SolrQuery query = new SolrQuery(); query.setQuery(s.toString()); if (fq != null) { query.setFilterQueries(fq); } query.setStart(0).setRows(1).setFacet(true).setFacetMinCount(1).set("json.nl", "map"); for (String facet : facets) { if (!facet.equals("completion_date") && !facet.equals("release_date")) { query.addFacetField(facet); } else { query.addDateRangeFacet(facet, solr.getRangeStartDate(), solr.getRangeEndDate(), solr.getRangeDate()); } } String apiResponse = dataApi.solrQuery(core, query); Map resp = jsonMapReader.readValue(apiResponse); Map respBody = (Map) resp.get("response"); JSONObject ret = new JSONObject(); ret.put("response", new JSONObject(respBody)); ret.put("facets", FacetHelper.formatFacetTree((Map) resp.get("facet_counts"))); return ret; }
From source file:eu.prestoprime.search.util.SolrQueryUtils.java
License:Open Source License
/** * Enable faceting on this solrQuery. Also sets the fields for faceting from * the Hashmaps key. If this is already a subsequent query you have to put * the selected facetValues to the appropriate value fields of the Hashmap * //from w w w. jav a 2s. com * @param solrQuery * solrQuery object * @param facets * a HashMap containing facetFields and values as key and value * respectively */ public static void setFacets(SolrQuery solrQuery, Map<P4FacetField, String> facets) { solrQuery.setFacet(true).setFacetLimit(10).setFacetMinCount(2); if (facets == null) facets = getDefaultFacetMap(); for (Entry<P4FacetField, String> facet : facets.entrySet()) { // enable faceting on this field if (facet.getKey().getAssocField().getType().equals(Schema.FieldType.TDATE)) { // rangefacet on all fields of type tdate solrQuery.addDateRangeFacet(facet.getKey().getFieldName(), new Date(0), new Date(), SearchConstants.getString("dateRangeFacetGranularity")); LOGGER.debug("Enable range faceting on field '" + facet.getKey().getFieldName() + "'"); } else { solrQuery.addFacetField(facet.getKey().getFieldName()); LOGGER.debug("Enable faceting on field '" + facet.getKey().getFieldName() + "'"); } // if there is already a value for filtering on this facet then add // a filterquery for this if (facet.getValue() != null && facet.getValue().length() > 0) { LOGGER.debug("Set facet value '" + facet.getValue() + "' for field '" + facet.getKey().getFieldName() + "'"); solrQuery.addFilterQuery(facet.getKey().getFieldName() + ":" + facet.getValue()); } } }
From source file:org.hippoecm.hst.demo.components.SolrFaceting.java
License:Apache License
@Override public void doBeforeRender(final HstRequest request, final HstResponse response) throws HstComponentException { HippoSolrClient solrClient = HstServices.getComponentManager().getComponent(HippoSolrClient.class.getName(), SOLR_MODULE_NAME);/*from w w w.j a v a 2 s .co m*/ SolrSearchParams params = new SolrSearchParams(request); params.setParamsOnRequestAttr(); try { // set the free text query HippoQuery hippoQuery = solrClient.createQuery(params.getQuery()); SolrQuery solrQuery = hippoQuery.getSolrQuery(); String facetPath = request.getRequestContext().getResolvedSiteMapItem().getParameter("facetpath"); if (facetPath != null) { // there is a facet path : Account for the constraints // the facet path looks like key/value/key/value String[] constraints = facetPath.split("/"); if (constraints.length % 2 != 0) { log.warn("Invalid constraints because not equal number of keys and values"); } else { int i = 0; while (i < constraints.length) { String facetField = constraints[i]; String facetValue = constraints[i + 1]; solrQuery.addFilterQuery(facetField + ":" + solrClient.getQueryParser().escape(facetValue)); i += 2; } } } // set rows to 0 : we are not interested to get results, but to get faceted navigation solrQuery.setRows(0); solrQuery.addFacetField("brand", "categories", "title"); solrQuery.setFacetLimit(10); Calendar startCal = Calendar.getInstance(); startCal.add(Calendar.YEAR, -5); Date startDate = startCal.getTime(); Date endDate = Calendar.getInstance().getTime(); solrQuery.addDateRangeFacet("date", startDate, endDate, "+1YEAR"); // From SOLR 3.6 and higher you can also use : // solrQuery.addDateRangeFacet("date", startDate , endDate, "+1YEAR, +1MONTH, +1DAY"); // This way you can create multiple buckets for 1 date field final HippoQueryResult result = hippoQuery.execute(); // we do not need to bind the beans with their providers for faceting, so no need for // result.bindHits() request.setAttribute("queryResponse", result.getQueryResponse()); request.setAttribute("query", params.getQuery()); } catch (SolrServerException e) { throw new HstComponentException(e); } }