From 3971ae3fa21114d9ee927b5aaa39189f03a70f84 Mon Sep 17 00:00:00 2001 From: Gethin James Date: Thu, 4 May 2017 15:38:45 +0200 Subject: [PATCH] SEARCH-409: Adding a Solr stats request --- .../service/cmr/search/SearchParameters.java | 23 ++- .../cmr/search/StatsRequestParameters.java | 183 ++++++++++++++++++ 2 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/alfresco/service/cmr/search/StatsRequestParameters.java diff --git a/src/main/java/org/alfresco/service/cmr/search/SearchParameters.java b/src/main/java/org/alfresco/service/cmr/search/SearchParameters.java index 7f63b1bc94..f2e0e130a6 100644 --- a/src/main/java/org/alfresco/service/cmr/search/SearchParameters.java +++ b/src/main/java/org/alfresco/service/cmr/search/SearchParameters.java @@ -193,6 +193,8 @@ public class SearchParameters implements BasicSearchParameters private IntervalParameters interval; + private List stats; + /** * Default constructor */ @@ -240,6 +242,7 @@ public class SearchParameters implements BasicSearchParameters sp.spellCheck = this.spellCheck; sp.highlight = this.highlight; sp.interval = this.interval; + sp.stats = this.stats; return sp; } @@ -295,6 +298,16 @@ public class SearchParameters implements BasicSearchParameters this.highlight = highlight; } + public List getStats() + { + return stats; + } + + public void setStats(List stats) + { + this.stats = stats; + } + public IntervalParameters getInterval() { return interval; @@ -1277,10 +1290,12 @@ public class SearchParameters implements BasicSearchParameters .append(", queryTemplates=").append(this.queryTemplates).append(", namespace=") .append(this.namespace).append(", maxPermissionChecks=").append(this.maxPermissionChecks) .append(", maxPermissionCheckTimeMillis=").append(this.maxPermissionCheckTimeMillis) - .append(", defaultFieldName=").append(this.defaultFieldName).append(", fieldFacets=") - .append(this.fieldFacets).append(", facetQueries=").append(this.facetQueries) - .append(this.filterQueries).append(", filterQueries=").append(this.filterQueries) - .append(this.pivots).append(", pivots=").append(this.pivots) + .append(", defaultFieldName=").append(this.defaultFieldName) + .append(", fieldFacets=").append(this.fieldFacets) + .append(", facetQueries=").append(this.facetQueries) + .append(", filterQueries=").append(this.filterQueries) + .append(", pivots=").append(this.pivots) + .append(", stats=").append(this.stats) .append(", useInMemorySort=").append(this.useInMemorySort) .append(", maxRawResultSetSizeForInMemorySort=").append(this.maxRawResultSetSizeForInMemorySort) .append(", extraParameters=").append(this.extraParameters).append(", excludeTenantFilter=") diff --git a/src/main/java/org/alfresco/service/cmr/search/StatsRequestParameters.java b/src/main/java/org/alfresco/service/cmr/search/StatsRequestParameters.java new file mode 100644 index 0000000000..5e613a2afd --- /dev/null +++ b/src/main/java/org/alfresco/service/cmr/search/StatsRequestParameters.java @@ -0,0 +1,183 @@ +/* + * #%L + * Alfresco Data model classes + * %% + * Copyright (C) 2005 - 2017 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.service.cmr.search; + +import org.codehaus.jackson.annotate.JsonCreator; +import org.codehaus.jackson.annotate.JsonProperty; + +import java.util.Collections; +import java.util.List; + +/** + * POJO class representing Stats request + */ +public class StatsRequestParameters +{ + private final String field; + private final String label; + private final List percentiles; + private final Boolean min; + private final Boolean max; + private final Boolean sum; + private final Boolean count; + private final Boolean missing; + private final Boolean sumOfSquares; + private final Boolean mean; + private final Boolean stddev; + private final Boolean distinctValues; + private final Boolean countDistinct; + private final Boolean cardinality; + private final Float cardinalityAccuracy; + private final List excludeFilters; + + @JsonCreator + public StatsRequestParameters( + @JsonProperty("field") String field, + @JsonProperty("label") String label, + @JsonProperty("percentiles") List percentiles, + @JsonProperty("min") Boolean min, + @JsonProperty("max") Boolean max, + @JsonProperty("sum") Boolean sum, + @JsonProperty("count") Boolean count, + @JsonProperty("missing") Boolean missing, + @JsonProperty("sumOfSquares") Boolean sumOfSquares, + @JsonProperty("mean") Boolean mean, + @JsonProperty("stddev") Boolean stddev, + @JsonProperty("distinctValues") Boolean distinctValues, + @JsonProperty("countDistinct") Boolean countDistinct, + @JsonProperty("cardinality") Boolean cardinality, + @JsonProperty("cardinalityAccuracy") Float cardinalityAccuracy, + @JsonProperty("excludeFilters") List excludeFilters) + { + this.field = field; + this.label = label; + this.percentiles = percentiles == null? Collections.emptyList():percentiles; + + this.min = min == null?true:min; + this.max = max == null?true:max; + this.sum = sum == null?true:sum; + this.count = count == null?true:count; + this.missing = missing == null?true:missing; + this.sumOfSquares = sumOfSquares == null?true:sumOfSquares; + this.mean = mean == null?true:mean; + this.stddev = stddev == null?true:stddev; + + this.distinctValues = distinctValues == null?false:distinctValues; + this.countDistinct = countDistinct == null?false:countDistinct; + this.cardinality = cardinality == null?false:cardinality; + this.cardinalityAccuracy = cardinalityAccuracy == null?0.3f:cardinalityAccuracy; + this.excludeFilters = excludeFilters == null? Collections.emptyList():excludeFilters; + } + + public String getField() + { + return field; + } + + public String getLabel() + { + return label; + } + + public List getPercentiles() + { + return percentiles; + } + + public Boolean getDistinctValues() + { + return distinctValues; + } + + public Boolean getCountDistinct() + { + return countDistinct; + } + + public Boolean getCardinality() + { + return cardinality; + } + + public Float getCardinalityAccuracy() + { + return cardinalityAccuracy; + } + + public List getExcludeFilters() + { + return excludeFilters; + } + + public Boolean getMin() + { + return min; + } + + public Boolean getMax() + { + return max; + } + + public Boolean getSum() + { + return sum; + } + + public Boolean getCount() + { + return count; + } + + public Boolean getMissing() + { + return missing; + } + + public Boolean getSumOfSquares() + { + return sumOfSquares; + } + + public Boolean getMean() + { + return mean; + } + + public Boolean getStddev() + { + return stddev; + } + + @Override + public String toString() + { + return "StatsRequestParameters{" + "field='" + field + '\'' + ", label='" + label + '\'' + ", percentiles=" + percentiles + ", min=" + min + + ", max=" + max + ", sum=" + sum + ", count=" + count + ", missing=" + missing + ", sumOfSquares=" + sumOfSquares + ", mean=" + + mean + ", stddev=" + stddev + ", distinctValues=" + distinctValues + ", countDistinct=" + countDistinct + ", cardinality=" + + cardinality + ", cardinalityAccuracy=" + cardinalityAccuracy + ", excludeFilters=" + excludeFilters + '}'; + } +}