mirror of
https://github.com/Alfresco/SearchServices.git
synced 2026-09-16 18:12:56 +00:00
Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)
105660: Merged DEV to HEAD-BUG-FIX
91143: POC - mimetype drill in - grouping -> raw mimetype
- content size dynamic grouping and drill in
- some bug fixes to running histogram generation
Fixes for ACE-3853 SOLR 4 - allow configurable mimetype faceting etc that matches reporting and analytics
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@105708 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
+92
-64
@@ -301,17 +301,17 @@ public class TrackerStats
|
||||
|
||||
}
|
||||
|
||||
static class Bucket
|
||||
public static class Bucket
|
||||
{
|
||||
IncrementalStats incrementalStats;
|
||||
|
||||
double leftBoundary;
|
||||
public double leftBoundary;
|
||||
|
||||
double rightBoundary;
|
||||
public double rightBoundary;
|
||||
|
||||
double countLeft;
|
||||
public double countLeft;
|
||||
|
||||
double countRight;
|
||||
public double countRight;
|
||||
|
||||
Bucket(IncrementalStats incrementalStats, double leftBoundary, double rightBoundary)
|
||||
{
|
||||
@@ -375,7 +375,7 @@ public class TrackerStats
|
||||
|
||||
}
|
||||
|
||||
static class IncrementalStats
|
||||
public static class IncrementalStats
|
||||
{
|
||||
Date start = new Date();
|
||||
|
||||
@@ -395,7 +395,7 @@ public class TrackerStats
|
||||
|
||||
InformationServerCollectionProvider server;
|
||||
|
||||
IncrementalStats(int scale, int buckets, InformationServerCollectionProvider infoSrv)
|
||||
public IncrementalStats(int scale, int buckets, InformationServerCollectionProvider infoSrv)
|
||||
{
|
||||
this.scale = scale;
|
||||
this.buckets = buckets;
|
||||
@@ -458,7 +458,7 @@ public class TrackerStats
|
||||
return map;
|
||||
}
|
||||
|
||||
synchronized void reset()
|
||||
public synchronized void reset()
|
||||
{
|
||||
moments = new double[5];
|
||||
|
||||
@@ -473,7 +473,7 @@ public class TrackerStats
|
||||
start = new Date();
|
||||
}
|
||||
|
||||
synchronized void add(double xUnscaled)
|
||||
public synchronized void add(double xUnscaled)
|
||||
{
|
||||
double x = xUnscaled / scale;
|
||||
if ((moments[0] == 0) || (x > max))
|
||||
@@ -514,50 +514,7 @@ public class TrackerStats
|
||||
else if (moments[0] == buckets)
|
||||
{
|
||||
values.add(Double.valueOf(x));
|
||||
|
||||
// generate initial bucket list
|
||||
Collections.sort(values);
|
||||
FOUND: for (int i = 0; i < values.size(); i++)
|
||||
{
|
||||
for (Bucket b : hist)
|
||||
{
|
||||
if ((b.leftBoundary <= values.get(i)) && (values.get(i) < b.rightBoundary))
|
||||
{
|
||||
b.add(values.get(i));
|
||||
continue FOUND;
|
||||
}
|
||||
|
||||
}
|
||||
if (i < values.size() - 1)
|
||||
{
|
||||
double start = values.get(i);
|
||||
double end = start + 1.0D;
|
||||
|
||||
END: for (int j = i + 1; j < values.size(); j++)
|
||||
{
|
||||
if (values.get(j) > start)
|
||||
{
|
||||
end = values.get(j);
|
||||
break END;
|
||||
}
|
||||
}
|
||||
|
||||
Bucket b = new Bucket(this, start, end);
|
||||
hist.add(b);
|
||||
}
|
||||
else
|
||||
{
|
||||
double first = values.get(0);
|
||||
double last = values.get(values.size() - 1);
|
||||
double width = 1.0D;
|
||||
if (values.size() > 1)
|
||||
{
|
||||
width = (last - first) / (values.size() - 1);
|
||||
}
|
||||
Bucket b = new Bucket(this, last, last + width);
|
||||
hist.add(b);
|
||||
}
|
||||
}
|
||||
buildInitialBuckets();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -574,7 +531,7 @@ public class TrackerStats
|
||||
merge(bestToMerge.getFirst());
|
||||
}
|
||||
}
|
||||
else if (x > hist.get(hist.size() - 1).rightBoundary)
|
||||
else if (x >= hist.get(hist.size() - 1).rightBoundary)
|
||||
{
|
||||
double delta = (x - hist.get(hist.size() - 1).rightBoundary) / 3.0;
|
||||
Bucket b = new Bucket(this, hist.get(hist.size() - 1).rightBoundary, x + delta);
|
||||
@@ -600,16 +557,76 @@ public class TrackerStats
|
||||
}
|
||||
Pair<Integer, Double> bestToMerge = findBestToMerge();
|
||||
Pair<Integer, Double> bestToSplit = findBestToSplit();
|
||||
|
||||
if (bestToMerge.getSecond() - bestToSplit.getSecond() < 0)
|
||||
{
|
||||
merge(bestToMerge.getFirst());
|
||||
split(bestToMerge.getFirst() < bestToSplit.getFirst() ? bestToSplit.getFirst() - 1 : bestToSplit.getFirst());
|
||||
if(hist.size() < buckets)
|
||||
{
|
||||
split(bestToSplit.getFirst());
|
||||
}
|
||||
else
|
||||
{
|
||||
merge(bestToMerge.getFirst());
|
||||
split(bestToMerge.getFirst() < bestToSplit.getFirst() ? bestToSplit.getFirst() - 1 : bestToSplit.getFirst());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void buildInitialBuckets()
|
||||
{
|
||||
// generate initial bucket list
|
||||
Collections.sort(values);
|
||||
FOUND: for (int i = 0; i < values.size(); i++)
|
||||
{
|
||||
for (Bucket b : hist)
|
||||
{
|
||||
if ((b.leftBoundary <= values.get(i)) && (values.get(i) < b.rightBoundary))
|
||||
{
|
||||
b.add(values.get(i));
|
||||
continue FOUND;
|
||||
}
|
||||
|
||||
}
|
||||
if (i < values.size() - 1)
|
||||
{
|
||||
double start = values.get(i);
|
||||
double end = start + 1.0D;
|
||||
|
||||
END: for (int j = i + 1; j < values.size(); j++)
|
||||
{
|
||||
if (values.get(j) > start)
|
||||
{
|
||||
end = values.get(j);
|
||||
break END;
|
||||
}
|
||||
}
|
||||
|
||||
Bucket b = new Bucket(this, start, end);
|
||||
b.add(values.get(i));
|
||||
hist.add(b);
|
||||
}
|
||||
else
|
||||
{
|
||||
double first = values.get(0);
|
||||
double last = values.get(values.size() - 1);
|
||||
double width = 1.0D;
|
||||
if (values.size() > 1)
|
||||
{
|
||||
width = (last - first) / (values.size() - 1);
|
||||
}
|
||||
Bucket b = new Bucket(this, last, last + width);
|
||||
b.add(values.get(i));
|
||||
hist.add(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void merge(int position)
|
||||
{
|
||||
Bucket lower = hist.get(position);
|
||||
@@ -662,27 +679,27 @@ public class TrackerStats
|
||||
return new Pair<Integer, Double>(bucket, maxError);
|
||||
}
|
||||
|
||||
synchronized long getN()
|
||||
public synchronized long getN()
|
||||
{
|
||||
return (long) moments[0];
|
||||
}
|
||||
|
||||
synchronized double getMin()
|
||||
public synchronized double getMin()
|
||||
{
|
||||
return min;
|
||||
}
|
||||
|
||||
synchronized double getMax()
|
||||
public synchronized double getMax()
|
||||
{
|
||||
return max;
|
||||
}
|
||||
|
||||
synchronized double getMean()
|
||||
public synchronized double getMean()
|
||||
{
|
||||
return moments[1];
|
||||
}
|
||||
|
||||
synchronized double getVarience()
|
||||
public synchronized double getVarience()
|
||||
{
|
||||
if (moments[0] > 1)
|
||||
{
|
||||
@@ -694,12 +711,12 @@ public class TrackerStats
|
||||
}
|
||||
}
|
||||
|
||||
synchronized double getStandardDeviation()
|
||||
public synchronized double getStandardDeviation()
|
||||
{
|
||||
return Math.sqrt(getVarience());
|
||||
}
|
||||
|
||||
synchronized double getSkew()
|
||||
public synchronized double getSkew()
|
||||
{
|
||||
if (moments[0] > 2)
|
||||
{
|
||||
@@ -712,7 +729,7 @@ public class TrackerStats
|
||||
}
|
||||
}
|
||||
|
||||
synchronized double getKurtosis()
|
||||
public synchronized double getKurtosis()
|
||||
{
|
||||
if (moments[0] > 3)
|
||||
{
|
||||
@@ -729,6 +746,17 @@ public class TrackerStats
|
||||
return Double.NaN;
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized List<Bucket> getHistogram()
|
||||
{
|
||||
if(hist.size() == 0)
|
||||
{
|
||||
buildInitialBuckets();
|
||||
}
|
||||
return hist;
|
||||
}
|
||||
|
||||
|
||||
|
||||
synchronized IncrementalStats copy()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user