List of usage examples for org.apache.solr.client.solrj.response RangeFacet getCounts
public List<Count> getCounts()
From source file:com.frank.search.solr.core.ResultHelper.java
License:Apache License
/** * @param query// w w w.j a va 2 s .c om * @param response * @return * @since 1.5 */ static Map<Field, Page<FacetFieldEntry>> convertFacetQueryResponseToRangeFacetPageMap(FacetQuery query, QueryResponse response) { Assert.notNull(query, "Cannot convert response for 'null', query"); if (!hasFacets(query, response) || isEmpty(response.getFacetRanges())) { return Collections.emptyMap(); } Map<Field, Page<FacetFieldEntry>> facetResult = new HashMap<Field, Page<FacetFieldEntry>>(); Pageable pageable = query.getFacetOptions().getPageable(); int initalPageSize = pageable.getPageSize(); for (RangeFacet<?, ?> rangeFacet : response.getFacetRanges()) { if (rangeFacet == null || !StringUtils.hasText(rangeFacet.getName())) { continue; } Field field = new SimpleField(rangeFacet.getName()); List<FacetFieldEntry> entries; long total; if (isNotEmpty(rangeFacet.getCounts())) { entries = new ArrayList<FacetFieldEntry>(initalPageSize); for (RangeFacet.Count count : rangeFacet.getCounts()) { entries.add(new SimpleFacetFieldEntry(field, count.getValue(), count.getCount())); } total = rangeFacet.getCounts().size(); } else { entries = Collections.<FacetFieldEntry>emptyList(); total = 0; } facetResult.put(field, new SolrResultPage<FacetFieldEntry>(entries, pageable, total, null)); } return facetResult; }
From source file:com.nridge.ds.solr.SolrResponseBuilder.java
License:Open Source License
@SuppressWarnings({ "unchecked", "rawtypes" })
private void populateFacet(DataTable aTable, RangeFacet aRangeFacet) {
DataField schemaField;//from w ww . jav a2s. c om
Logger appLogger = mAppMgr.getLogger(this, "populateFacet");
appLogger.trace(mAppMgr.LOGMSG_TRACE_ENTER);
DataBag resultBag = mBag;
String fieldName = aRangeFacet.getName();
schemaField = resultBag.getFieldByName(fieldName);
Field.Type fieldType = facetRangeToFieldType(aRangeFacet, schemaField);
if (Field.isDateOrTime(fieldType)) {
RangeFacet<Date, Date> facetRangeDate = (RangeFacet<Date, Date>) aRangeFacet;
aTable.newRow();
aTable.setValueByName("field_name", fieldName);
if ((schemaField != null) && (StringUtils.isNotEmpty(schemaField.getTitle())))
aTable.setValueByName("field_title", schemaField.getTitle());
else
aTable.setValueByName("field_title", Field.nameToTitle(fieldName));
aTable.setValueByName("field_type", Field.typeToString(fieldType));
Object objectValue = facetRangeDate.getStart();
if (objectValue != null)
aTable.setValueByName("field_start", facetRangeDate.getStart());
objectValue = facetRangeDate.getEnd();
if (objectValue != null)
aTable.setValueByName("field_finish", facetRangeDate.getEnd());
objectValue = facetRangeDate.getGap();
if (objectValue != null)
aTable.setValueByName("field_gap", objectValue.toString());
objectValue = facetRangeDate.getAfter();
if (objectValue != null)
aTable.setValueByName("count_after", objectValue.toString());
objectValue = facetRangeDate.getBefore();
if (objectValue != null)
aTable.setValueByName("count_before", objectValue.toString());
objectValue = facetRangeDate.getBetween();
if (objectValue != null)
aTable.setValueByName("count_between", objectValue.toString());
ArrayList<String> fieldValueList = new ArrayList<>();
for (RangeFacet.Count rfCount : facetRangeDate.getCounts())
fieldValueList.add(String.format("%s (%d)", rfCount.getValue(), rfCount.getCount()));
aTable.setValuesByName("facet_name_count", fieldValueList);
aTable.addRow();
} else {
RangeFacet.Numeric facetRangeNumber = (RangeFacet.Numeric) aRangeFacet;
aTable.newRow();
aTable.setValueByName("field_name", fieldName);
if ((schemaField != null) && (StringUtils.isNotEmpty(schemaField.getTitle())))
aTable.setValueByName("field_title", schemaField.getTitle());
else
aTable.setValueByName("field_title", Field.nameToTitle(fieldName));
aTable.setValueByName("field_type", Field.typeToString(fieldType));
Object objectValue = facetRangeNumber.getStart();
if (objectValue != null)
aTable.setValueByName("field_start", objectValue.toString());
objectValue = facetRangeNumber.getEnd();
if (objectValue != null)
aTable.setValueByName("field_finish", objectValue.toString());
objectValue = facetRangeNumber.getGap();
if (objectValue != null)
aTable.setValueByName("field_gap", objectValue.toString());
objectValue = facetRangeNumber.getAfter();
if (objectValue != null)
aTable.setValueByName("count_after", objectValue.toString());
objectValue = facetRangeNumber.getBefore();
if (objectValue != null)
aTable.setValueByName("count_before", objectValue.toString());
objectValue = facetRangeNumber.getBetween();
if (objectValue != null)
aTable.setValueByName("count_between", objectValue.toString());
ArrayList<String> fieldValueList = new ArrayList<>();
for (RangeFacet.Count rfCount : facetRangeNumber.getCounts())
fieldValueList.add(String.format("%s (%d)", rfCount.getValue(), rfCount.getCount()));
aTable.setValuesByName("facet_name_count", fieldValueList);
aTable.addRow();
}
appLogger.trace(mAppMgr.LOGMSG_TRACE_DEPART);
}
From source file:eu.prestoprime.search.util.ResultProcessor.java
License:Open Source License
public static Facets extractFacetsFromResponse(QueryResponse response, Map<P4FacetField, String> facetFilters) { // Map for all facetFields with according values from the queryResponse Facets facets = new Facets(); // Put facetValues to this map for (FacetField field : response.getFacetFields()) { // validate FacetField against P4Schema and get the respective // FacetField P4FacetField p4Field = P4FacetField.get(field.getName()); if (field.getValueCount() >= 1 && p4Field != null) { Facet facet = new Facet(); facet.setFacetName(p4Field.getFieldName()); for (Count facetValue : field.getValues()) { if (!facetValue.getName().isEmpty()) { Value value = new Value(); value.setCount(facetValue.getCount()); value.setTerm(facetValue.getName()); // check if this value is already selected boolean isSelected = (facetFilters.get(p4Field) != null && facetFilters.get(p4Field).contains(facetValue.getName())); value.setSelected(isSelected); LOGGER.debug("Facet value: " + facetValue.getName() + " is selected? " + isSelected); // build a filterquery that is used when this facet is // selected String filter = ""; if (isSelected) { // deselect String[] singleValues = facetFilters.get(p4Field).replaceAll("\"", "").split("( AND )"); LOGGER.debug("Building new filter for deselecting. Starting from: " + facetFilters.get(p4Field)); String delim = ""; int i = 0; for (String s : singleValues) { LOGGER.debug("Iteration " + (++i) + ": " + s + " eq " + facetValue.getName() + " ? " + s.equals(facetValue.getName())); if (!s.equals(facetValue.getName())) { LOGGER.debug("No. Append this one -> "); filter += delim + "\"" + s + "\""; delim = " AND "; }//from ww w . ja v a 2 s .c om LOGGER.debug("Iteration " + (++i) + ": " + filter); } } else { filter = facetFilters.get(p4Field); LOGGER.debug("Altering old filter for selecting. Starting from: " + filter); if (filter == null || filter.isEmpty()) { filter = "\"" + facetValue.getName() + "\""; } else { filter += " AND \"" + facetValue.getName() + "\""; } } LOGGER.debug("Result filter = " + filter); value.setFilterQuery(filter); facet.getValue().add(value); } } facets.getFacet().add(facet); } } // do the same for rangeFacets for (RangeFacet range : response.getFacetRanges()) { P4FacetField p4Field = P4FacetField.get(range.getName()); if (range.getCounts().size() >= 1 && p4Field != null) { Facet facet = new Facet(); facet.setFacetName(p4Field.getFieldName()); if (p4Field.getAssocField().getType().equals(FieldType.TDATE)) { for (RangeFacet.Count count : (List<RangeFacet.Count>) range.getCounts()) { Value value = new Value(); value.setTerm(formatDateString(count.getValue())); value.setCount(count.getCount()); boolean isSelected = (facetFilters.get(p4Field) != null && !facetFilters.get(p4Field).isEmpty()); value.setSelected(isSelected); if (!isSelected) { value.setFilterQuery(SolrQueryUtils.getDateRangeFilter(count.getValue())); } else { value.setFilterQuery(""); } facet.getValue().add(value); } } else { // TODO implement for other ranged facets. right now no // other fieldTypes used yet... } facets.getFacet().add(facet); } } return facets; }
From source file:org.alfresco.solr.query.DistributedAlfrescoSolrFacetingTest.java
License:Open Source License
@Test public void rangeFaceting_mincountMissing_shouldReturnFacetsMincountOne() throws Exception { String jsonQuery = "{\"query\":\"(suggest:a)\",\"locales\":[\"en\"], \"templates\": [{\"name\":\"t1\", \"template\":\"%cm:content\"}], \"authorities\": [\"joel\"], \"tenants\": []}"; putHandleDefaults();/*from w w w .ja v a2 s. c o m*/ QueryResponse queryResponse = query(getDefaultTestClient(), true, jsonQuery, params("qt", "/afts", "shards.qt", "/afts", "start", "0", "rows", "0", "fl", "score,id", "facet", "true", "facet.range", "{http://www.alfresco.org/model/content/1.0}created", "facet.range.start", "2000-01-02T00:00:00Z", "facet.range.end", "2020-01-02T00:00:00Z", "facet.range.gap", "+100DAY")); //facet.distrib.mco=true List<RangeFacet> facetRanges = queryResponse.getFacetRanges(); assertThat(facetRanges.size(), is(1)); RangeFacet createdDateRangeFacet = facetRanges.get(0); List<RangeFacet.Count> createdDateCounts = createdDateRangeFacet.getCounts(); assertThat(createdDateCounts.size(), is(4)); assertThat(createdDateCounts.get(0).getValue(), is("2014-10-15T00:00:00Z")); assertThat(createdDateCounts.get(0).getCount(), is(2)); assertThat(createdDateCounts.get(1).getValue(), is("2015-01-23T00:00:00Z")); assertThat(createdDateCounts.get(1).getCount(), is(1)); assertThat(createdDateCounts.get(2).getValue(), is("2015-11-19T00:00:00Z")); assertThat(createdDateCounts.get(2).getCount(), is(1)); assertThat(createdDateCounts.get(3).getValue(), is("2016-12-23T00:00:00Z")); assertThat(createdDateCounts.get(3).getCount(), is(1)); }
From source file:org.alfresco.solr.query.DistributedAlfrescoSolrFacetingTest.java
License:Open Source License
@Test public void rangeFaceting_mincountSetZero_shouldReturnFacetsMincountOne() throws Exception { String jsonQuery = "{\"query\":\"(suggest:a)\",\"locales\":[\"en\"], \"templates\": [{\"name\":\"t1\", \"template\":\"%cm:content\"}], \"authorities\": [\"joel\"], \"tenants\": []}"; putHandleDefaults();//w w w. j ava 2 s . co m QueryResponse queryResponse = query(getDefaultTestClient(), true, jsonQuery, params("qt", "/afts", "shards.qt", "/afts", "start", "0", "rows", "0", "fl", "score,id", "facet", "true", "facet.range", "{http://www.alfresco.org/model/content/1.0}created", "facet.range.start", "2000-01-02T00:00:00Z", "facet.range.end", "2020-01-02T00:00:00Z", "facet.range.gap", "+100DAY", "facet.mincount", "0")); //facet.distrib.mco=true List<RangeFacet> facetRanges = queryResponse.getFacetRanges(); assertThat(facetRanges.size(), is(1)); RangeFacet createdDateRangeFacet = facetRanges.get(0); List<RangeFacet.Count> createdDateCounts = createdDateRangeFacet.getCounts(); assertThat(createdDateCounts.size(), is(4)); assertThat(createdDateCounts.get(0).getValue(), is("2014-10-15T00:00:00Z")); assertThat(createdDateCounts.get(0).getCount(), is(2)); assertThat(createdDateCounts.get(1).getValue(), is("2015-01-23T00:00:00Z")); assertThat(createdDateCounts.get(1).getCount(), is(1)); assertThat(createdDateCounts.get(2).getValue(), is("2015-11-19T00:00:00Z")); assertThat(createdDateCounts.get(2).getCount(), is(1)); assertThat(createdDateCounts.get(3).getValue(), is("2016-12-23T00:00:00Z")); assertThat(createdDateCounts.get(3).getCount(), is(1)); }
From source file:org.alfresco.solr.query.DistributedAlfrescoSolrFacetingTest.java
License:Open Source License
@Test public void rangeFaceting_mincountSetTwo_shouldReturnFacetsMincountTwo() throws Exception { String jsonQuery = "{\"query\":\"(suggest:a)\",\"locales\":[\"en\"], \"templates\": [{\"name\":\"t1\", \"template\":\"%cm:content\"}], \"authorities\": [\"joel\"], \"tenants\": []}"; putHandleDefaults();// www. j av a2s .c o m QueryResponse queryResponse = query(getDefaultTestClient(), true, jsonQuery, params("qt", "/afts", "shards.qt", "/afts", "start", "0", "rows", "0", "fl", "score,id", "facet", "true", "facet.range", "{http://www.alfresco.org/model/content/1.0}created", "facet.range.start", "2000-01-02T00:00:00Z", "facet.range.end", "2020-01-02T00:00:00Z", "facet.range.gap", "+100DAY", "facet.mincount", "2")); //facet.distrib.mco=true List<RangeFacet> facetRanges = queryResponse.getFacetRanges(); assertThat(facetRanges.size(), is(1)); RangeFacet createdDateRangeFacet = facetRanges.get(0); List<RangeFacet.Count> createdDateCounts = createdDateRangeFacet.getCounts(); assertThat(createdDateCounts.size(), is(1)); assertThat(createdDateCounts.get(0).getValue(), is("2014-10-15T00:00:00Z")); assertThat(createdDateCounts.get(0).getCount(), is(2)); }
From source file:org.apache.jackrabbit.core.query.lucene.FacetHandler.java
License:Open Source License
private void extractFacetInfo(NamedList<Object> info, SolrParams solrParams) { // Parse the queries _facetQuery = new LinkedHashMap<String, Long>(); NamedList<Long> fq = (NamedList<Long>) info.get("facet_queries"); if (fq != null) { for (Map.Entry<String, Long> entry : fq) { _facetQuery.put(entry.getKey(), entry.getValue()); }//from w w w.jav a 2 s . com } // Parse the facet info into fields // TODO?? The list could be <int> or <long>? If always <long> then we can switch to <Long> NamedList<NamedList<Number>> ff = (NamedList<NamedList<Number>>) info.get("facet_fields"); Map<String, FieldType> fieldTypeMap = new HashMap<>(); if (ff != null) { _facetFields = new ArrayList<FacetField>(ff.size()); _limitingFacets = new ArrayList<FacetField>(ff.size()); long minsize = totalSize; for (Map.Entry<String, NamedList<Number>> facet : ff) { String key = StringUtils.substringBeforeLast(facet.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR); String fieldInIndex = StringUtils.substringAfterLast(facet.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR); FacetField f = new FacetField(key); if (!fieldTypeMap.containsKey(key)) { try { //Find a key like f.field_name#unknownumber.facet.nodetype Pattern facetNodetype = Pattern.compile("f\\." + key + "#[0-9]+\\.facet\\.nodetype"); String nodetypeName = null; Iterator<String> parameterNamesIterator = solrParams.getParameterNamesIterator(); while (parameterNamesIterator.hasNext()) { String next = parameterNamesIterator.next(); if (facetNodetype.matcher(next).matches()) { nodetypeName = solrParams.get(next); break; } } ExtendedPropertyDefinition epd = NodeTypeRegistry.getInstance().getNodeType(nodetypeName) .getPropertyDefinition(key); fieldTypeMap.put(key, getType(epd)); } catch (NoSuchNodeTypeException e) { log.error(e.getMessage(), e); } } for (Map.Entry<String, Number> entry : facet.getValue()) { String facetValue = entry.getKey(); String query = fieldTypeMap.get(key).toInternal(entry.getKey()); Matcher matcher = valueWithQuery.matcher(facetValue); if (matcher.matches()) { query = matcher.group(2); facetValue = matcher.replaceFirst("$1"); } f.add(facetValue, entry.getValue().longValue()); f.getValues().get(f.getValueCount() - 1).setFilterQuery( ClientUtils.escapeQueryChars(fieldInIndex) + ":" + ClientUtils.escapeQueryChars(query)); } _facetFields.add(f); FacetField nl = f.getLimitingFields(minsize); if (nl.getValueCount() > 0) { _limitingFacets.add(nl); } } } // Parse date facets NamedList<NamedList<Object>> df = (NamedList<NamedList<Object>>) info.get("facet_dates"); if (df != null) { // System.out.println(df); _facetDates = new ArrayList<FacetField>(df.size()); for (Map.Entry<String, NamedList<Object>> facet : df) { // System.out.println("Key: " + facet.getKey() + " Value: " + facet.getValue()); NamedList<Object> values = facet.getValue(); String gap = (String) values.get("gap"); Date end = (Date) values.get("end"); FacetField f = new FacetField(StringUtils.substringBeforeLast(facet.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR), gap, end); for (Map.Entry<String, Object> entry : values) { try { String key = StringUtils.substringBeforeLast(entry.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR); String query = StringUtils.substringAfterLast(entry.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR); f.add(key, Long.parseLong(entry.getValue().toString())); if (!StringUtils.isEmpty(query)) { String rangePrefix = null; if (query.contains(RANGEFROM_EXCLUSIVE_PREFIX)) { rangePrefix = RANGEFROM_EXCLUSIVE_PREFIX; } else if (query.contains(RANGEFROM_INCLUSIVE_PREFIX)) { rangePrefix = RANGEFROM_INCLUSIVE_PREFIX; } if (!StringUtils.isEmpty(rangePrefix)) { f.getValues().get(f.getValueCount() - 1) .setFilterQuery(ClientUtils .escapeQueryChars(StringUtils.substringBefore(query, rangePrefix)) + rangePrefix + StringUtils.substringAfter(query, rangePrefix)); } } } catch (NumberFormatException e) { // Ignore for non-number responses which are already handled above } } _facetDates.add(f); } } // Parse range facets NamedList<NamedList<Object>> rf = (NamedList<NamedList<Object>>) info.get("facet_ranges"); if (rf != null) { // System.out.println(df); _facetRanges = new ArrayList<RangeFacet>(rf.size()); for (Map.Entry<String, NamedList<Object>> facet : rf) { NamedList<Object> values = facet.getValue(); Object rawGap = values.get("gap"); RangeFacet rangeFacet; if (rawGap instanceof Number) { Number gap = (Number) rawGap; Number start = (Number) values.get("start"); Number end = (Number) values.get("end"); Number before = (Number) values.get("before"); Number after = (Number) values.get("after"); rangeFacet = new RangeFacet.Numeric(StringUtils.substringBeforeLast(facet.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR), start, end, gap, before, after); } else { String gap = (String) rawGap; Date start = (Date) values.get("start"); Date end = (Date) values.get("end"); Number before = (Number) values.get("before"); Number after = (Number) values.get("after"); rangeFacet = new RangeFacet.Date(StringUtils.substringBeforeLast(facet.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR), start, end, gap, before, after); } NamedList<Integer> counts = (NamedList<Integer>) values.get("counts"); for (Map.Entry<String, Integer> entry : counts) { try { String key = StringUtils.substringBeforeLast(entry.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR); String query = StringUtils.substringAfterLast(entry.getKey(), SimpleJahiaJcrFacets.PROPNAME_INDEX_SEPARATOR); rangeFacet.addCount(key, entry.getValue()); if (!StringUtils.isEmpty(query)) { String rangePrefix = null; if (query.contains(RANGEFROM_EXCLUSIVE_PREFIX)) { rangePrefix = RANGEFROM_EXCLUSIVE_PREFIX; } else if (query.contains(RANGEFROM_INCLUSIVE_PREFIX)) { rangePrefix = RANGEFROM_INCLUSIVE_PREFIX; } if (!StringUtils.isEmpty(rangePrefix)) { ((RangeFacet.Count) rangeFacet.getCounts().get(rangeFacet.getCounts().size() - 1)) .setFilterQuery(ClientUtils .escapeQueryChars(StringUtils.substringBefore(query, rangePrefix)) + rangePrefix + StringUtils.substringAfter(query, rangePrefix)); } } } catch (NumberFormatException e) { // Ignore for non-number responses which are already handled above } } _facetRanges.add(rangeFacet); } } }
From source file:org.apache.nifi.processors.solr.QuerySolr.java
License:Apache License
private static void addFacetsFromSolrResponseToJsonWriter(final QueryResponse response, final JsonWriter writer) throws IOException { writer.beginObject();/*from w ww. j a v a2 s .com*/ writer.name("facet_queries"); writer.beginArray(); for (final Map.Entry<String, Integer> facetQuery : response.getFacetQuery().entrySet()) { writer.beginObject(); writer.name("facet").value(facetQuery.getKey()); writer.name("count").value(facetQuery.getValue()); writer.endObject(); } writer.endArray(); writer.name("facet_fields"); writer.beginObject(); for (final FacetField facetField : response.getFacetFields()) { writer.name(facetField.getName()); writer.beginArray(); for (final FacetField.Count count : facetField.getValues()) { writer.beginObject(); writer.name("facet").value(count.getName()); writer.name("count").value(count.getCount()); writer.endObject(); } writer.endArray(); } writer.endObject(); writer.name("facet_ranges"); writer.beginObject(); for (final RangeFacet rangeFacet : response.getFacetRanges()) { writer.name(rangeFacet.getName()); writer.beginArray(); final List<Count> list = rangeFacet.getCounts(); for (final Count count : list) { writer.beginObject(); writer.name("facet").value(count.getValue()); writer.name("count").value(count.getCount()); writer.endObject(); } writer.endArray(); } writer.endObject(); writer.name("facet_intervals"); writer.beginObject(); for (final IntervalFacet intervalFacet : response.getIntervalFacets()) { writer.name(intervalFacet.getField()); writer.beginArray(); for (final IntervalFacet.Count count : intervalFacet.getIntervals()) { writer.beginObject(); writer.name("facet").value(count.getKey()); writer.name("count").value(count.getCount()); writer.endObject(); } writer.endArray(); } writer.endObject(); writer.endObject(); }
From source file:org.jahia.services.query.QueryResultWrapperImpl.java
License:Open Source License
@Override public boolean isRangeFacetsEmpty(List<RangeFacet> rangeFacets) { if (rangeFacets.isEmpty()) { return true; } else {/*from ww w . j av a 2 s .co m*/ for (RangeFacet facetField : rangeFacets) { List<RangeFacet.Count> counts = facetField.getCounts(); for (RangeFacet.Count count : counts) { if (count.getCount() != 0) { return false; } } } } return true; }
From source file:org.jahia.taglibs.facet.Functions.java
License:Open Source License
/** * Check whether there is an unapplied range facet value existing in the facet. Useful in order to determine * whether a title/label should be displayed or not. * * @param rangeFacet the RangeFacet object holding all facet values for the facet field * @param appliedFacets variable retrieved from {@link Functions#getAppliedFacetFilters(String)} * @return true if unapplied range facet value exists otherwise false *//* ww w .j a v a 2 s . c o m*/ public static boolean isUnappliedRangeFacetValueExisting(RangeFacet<?, ?> rangeFacet, Map<String, List<KeyValue>> appliedFacets) { for (RangeFacet.Count facetCount : rangeFacet.getCounts()) { if (!isFacetValueApplied(facetCount, appliedFacets)) { return true; } } return false; }