server/src/app/Http/Controllers/Api/DateStatsController.php
changeset 424 feb0d3e0fef9
parent 407 2dba812c7ef2
child 425 f99435a7006e
equal deleted inserted replaced
423:788971813bdc 424:feb0d3e0fef9
    10 use CorpusParole\Libraries\Filters\CorpusFilterManager;
    10 use CorpusParole\Libraries\Filters\CorpusFilterManager;
    11 
    11 
    12 
    12 
    13 class DateStatsController extends Controller
    13 class DateStatsController extends Controller
    14 {
    14 {
    15     /**
    15     private function getStatQuery($query) {
    16      * Display the specified resource.
    16         return [
    17      *
       
    18      * @return \Illuminate\Http\Response
       
    19      */
       
    20     public function index(Request $request)
       
    21     {
       
    22 
       
    23 
       
    24         $filterManager = new CorpusFilterManager();
       
    25         $filters = $filterManager->prepareFilters($request);
       
    26         unset($filters['dates']);
       
    27         $qFilterParts = $filterManager->buildESFilters($filters);
       
    28 
       
    29         $query = $filterManager->buildQuery($qFilterParts);
       
    30 
       
    31         $esQuery = [
       
    32             'index' => config('elasticsearch.index'),
    17             'index' => config('elasticsearch.index'),
    33             'body' => [
    18             'body' => [
    34                 "size" => 0,
    19                 "size" => 0,
    35                 "query" => $query,
    20                 "query" => $query,
    36                 "aggs" => [
    21                 "aggs" => [
    58                         ]
    43                         ]
    59                     ]
    44                     ]
    60                 ]
    45                 ]
    61             ]
    46             ]
    62         ];
    47         ];
       
    48     }
       
    49 
       
    50     private function getMinMaxQuery($query) {
       
    51         return [
       
    52             'index' => config('elasticsearch.index'),
       
    53             'body' => [
       
    54                 "size" => 0,
       
    55                 "query" => $query,
       
    56                 "aggs" => [
       
    57                     "datestats" => [
       
    58                         "nested"=> [
       
    59                             "path" => "creation_years"
       
    60                         ],
       
    61                         "aggs" => [
       
    62                             "minyear" => [
       
    63                                 "min" => [ "field"=> "creation_years.year" ]
       
    64                             ],
       
    65                             "maxyear" => [
       
    66                                 "max" => [ "field"=> "creation_years.year" ]
       
    67                             ]
       
    68                         ]
       
    69                     ]
       
    70                 ]
       
    71             ]
       
    72         ];
       
    73     }
       
    74 
       
    75     private function getDocQuery(Request $request) {
       
    76         $filterManager = new CorpusFilterManager();
       
    77         $filters = $filterManager->prepareFilters($request);
       
    78         unset($filters['dates']);
       
    79         $qFilterParts = $filterManager->buildESFilters($filters);
       
    80 
       
    81         return $filterManager->buildQuery($qFilterParts);
       
    82     }
       
    83 
       
    84     /**
       
    85      * Display the min max date stats
       
    86      */
       
    87     public function minmax(Request $request) {
       
    88         $query = $this->getDocQuery($request);
       
    89 
       
    90         $esQuery = $this->getMinMaxQuery($query);
       
    91         $esRes = Es::search($esQuery);
       
    92 
       
    93         $datestats = [];
       
    94 
       
    95         $max = intval($esRes['aggregations']['datestats']['maxyear']['value']);
       
    96         $min = intval($esRes['aggregations']['datestats']['maxyear']['value']);
       
    97 
       
    98         return response()->json(['dateminmax' => [ $min, $max ] ]);
       
    99     }
       
   100 
       
   101     /**
       
   102      * Display the dates stats
       
   103      *
       
   104      * @return \Illuminate\Http\Response
       
   105      */
       
   106     public function index(Request $request)
       
   107     {
       
   108 
       
   109         $query = $this->getDocQuery($request);
       
   110 
       
   111         $esQuery = $this->getStatQuery($query);
    63         $esRes = Es::search($esQuery);
   112         $esRes = Es::search($esQuery);
    64 
   113 
    65         $datestats = [];
   114         $datestats = [];
    66 
   115 
    67         foreach($esRes['aggregations']['datestats']['years']['buckets'] as $bucket) {
   116         foreach($esRes['aggregations']['datestats']['years']['buckets'] as $bucket) {