diff -r 788971813bdc -r feb0d3e0fef9 server/src/app/Http/Controllers/Api/DateStatsController.php --- a/server/src/app/Http/Controllers/Api/DateStatsController.php Mon Nov 14 17:23:43 2016 +0100 +++ b/server/src/app/Http/Controllers/Api/DateStatsController.php Tue Nov 15 17:42:57 2016 +0100 @@ -12,23 +12,8 @@ class DateStatsController extends Controller { - /** - * Display the specified resource. - * - * @return \Illuminate\Http\Response - */ - public function index(Request $request) - { - - - $filterManager = new CorpusFilterManager(); - $filters = $filterManager->prepareFilters($request); - unset($filters['dates']); - $qFilterParts = $filterManager->buildESFilters($filters); - - $query = $filterManager->buildQuery($qFilterParts); - - $esQuery = [ + private function getStatQuery($query) { + return [ 'index' => config('elasticsearch.index'), 'body' => [ "size" => 0, @@ -60,6 +45,70 @@ ] ] ]; + } + + private function getMinMaxQuery($query) { + return [ + 'index' => config('elasticsearch.index'), + 'body' => [ + "size" => 0, + "query" => $query, + "aggs" => [ + "datestats" => [ + "nested"=> [ + "path" => "creation_years" + ], + "aggs" => [ + "minyear" => [ + "min" => [ "field"=> "creation_years.year" ] + ], + "maxyear" => [ + "max" => [ "field"=> "creation_years.year" ] + ] + ] + ] + ] + ] + ]; + } + + private function getDocQuery(Request $request) { + $filterManager = new CorpusFilterManager(); + $filters = $filterManager->prepareFilters($request); + unset($filters['dates']); + $qFilterParts = $filterManager->buildESFilters($filters); + + return $filterManager->buildQuery($qFilterParts); + } + + /** + * Display the min max date stats + */ + public function minmax(Request $request) { + $query = $this->getDocQuery($request); + + $esQuery = $this->getMinMaxQuery($query); + $esRes = Es::search($esQuery); + + $datestats = []; + + $max = intval($esRes['aggregations']['datestats']['maxyear']['value']); + $min = intval($esRes['aggregations']['datestats']['maxyear']['value']); + + return response()->json(['dateminmax' => [ $min, $max ] ]); + } + + /** + * Display the dates stats + * + * @return \Illuminate\Http\Response + */ + public function index(Request $request) + { + + $query = $this->getDocQuery($request); + + $esQuery = $this->getStatQuery($query); $esRes = Es::search($esQuery); $datestats = [];