server/src/app/Http/Controllers/Api/GeoStatsController.php
changeset 378 5b47eab083f3
parent 377 52169c718513
child 406 cf0f23803a53
equal deleted inserted replaced
377:52169c718513 378:5b47eab083f3
     3 namespace CorpusParole\Http\Controllers\Api;
     3 namespace CorpusParole\Http\Controllers\Api;
     4 
     4 
     5 use Illuminate\Http\Request;
     5 use Illuminate\Http\Request;
     6 
     6 
     7 use CorpusParole\Http\Controllers\Controller;
     7 use CorpusParole\Http\Controllers\Controller;
       
     8 use CorpusParole\Libraries\Filters\CorpusFilterManager;
       
     9 
     8 use Es;
    10 use Es;
     9 use Log;
    11 use Log;
    10 
    12 
    11 class GeoStatsController extends Controller
    13 class GeoStatsController extends Controller
    12 {
    14 {
    16      * @return \Illuminate\Http\Response
    18      * @return \Illuminate\Http\Response
    17      */
    19      */
    18     public function index(Request $request)
    20     public function index(Request $request)
    19     {
    21     {
    20         $area = $request->input('area');
    22         $area = $request->input('area');
    21         $filter = [
    23 
    22             'match_all' => []
    24         $filterManager = new CorpusFilterManager();
    23         ];
    25         $filters = $filterManager->prepareFilters($request);
       
    26         unset($filters['location']);
       
    27         $qFilterParts = $filterManager->buildESFilters($filters);
       
    28         if(is_null($qFilterParts)) {
       
    29             $qFilterParts = [];
       
    30         }
       
    31 
    24         if(!is_null($area) && $area !== config('corpusparole.geonames_earth_geonamesid')) {
    32         if(!is_null($area) && $area !== config('corpusparole.geonames_earth_geonamesid')) {
    25             $filter = [
    33             $qFilterParts[] = [
    26                 'term' => [
    34                 'term' => [
    27                     "geonames_hierarchy" => $area
    35                     "geonames_hierarchy" => $area
    28                 ]
    36                 ]
    29             ];
    37             ];
    30         }
    38         }
    31         $query = [
    39 
       
    40         $query = $filterManager->buildQuery($qFilterParts);
       
    41 
       
    42         $queryES = [
    32             'index' => env('ELASTICSEARCH_INDEX'),
    43             'index' => env('ELASTICSEARCH_INDEX'),
    33             'body' => [
    44             'body' => [
    34                 "size" => 0,
    45                 "size" => 0,
    35                 "query" => $filter,
    46                 "query" => $query,
    36                 "aggs" => [
    47                 "aggs" => [
    37                     "geos" => [
    48                     "geos" => [
    38                         "terms" => [
    49                         "terms" => [
    39                             "size" => 0,
    50                             "size" => 0,
    40                             "field" => "geonames_hierarchy"
    51                             "field" => "geonames_hierarchy"
    41                         ]
    52                         ]
    42                     ]
    53                     ]
    43                 ]
    54                 ]
    44             ]
    55             ]
    45         ];
    56         ];
    46         $esRes = Es::search($query);
    57         $esRes = Es::search($queryES);
    47 
    58 
    48         $geosats = [];
    59         $geosats = [];
    49 
    60 
    50         foreach($esRes['aggregations']['geos']['buckets'] as $bucket) {
    61         foreach($esRes['aggregations']['geos']['buckets'] as $bucket) {
    51             $geosats[(string)($bucket['key'])] = $bucket['doc_count'];
    62             $geosats[(string)($bucket['key'])] = $bucket['doc_count'];