server/src/app/Http/Controllers/Api/LanguageController.php
changeset 377 52169c718513
parent 126 e87a340711a4
child 378 5b47eab083f3
equal deleted inserted replaced
376:02f113d43f18 377:52169c718513
     1 <?php
     1 <?php
     2 
     2 
     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 // use CorpusParole\Http\Requests;
       
     7 use CorpusParole\Http\Controllers\Controller;
     6 use CorpusParole\Http\Controllers\Controller;
     8 
     7 
     9 use CorpusParole\Libraries\Sparql\SparqlClient;
     8 use Es;
    10 
       
    11 
     9 
    12 class LanguageController extends Controller
    10 class LanguageController extends Controller
    13 {
    11 {
    14     private $sparqlClient = null;
       
    15 
       
    16     public function __construct(SparqlClient $sparqlClient) {
       
    17         $this->sparqlClient = $sparqlClient;
       
    18     }
       
    19 
       
    20     /**
    12     /**
    21      * Display the specified resource.
    13      * Display the specified resource.
    22      *
    14      *
    23      * @return \Illuminate\Http\Response
    15      * @return \Illuminate\Http\Response
    24      */
    16      */
    25     public function index()
    17     public function index(Request $request)
    26     {
    18     {
    27 
    19 
    28         $query = "select ?lang (count(?lang) as ?count) where {
    20         $query = [ "match_all" => []];
    29             ?s a <http://www.europeana.eu/schemas/edm/ProvidedCHO>.
       
    30             ?s <http://purl.org/dc/elements/1.1/language> ?lang
       
    31         }
       
    32         GROUP BY ?lang
       
    33         ORDER BY DESC(?count)";
       
    34 
    21 
    35         $docs = $this->sparqlClient->query($query);
    22         $esQuery = [
       
    23             'index' => env('ELASTICSEARCH_INDEX'),
       
    24             'body' => [
       
    25                 "size" => 0,
       
    26                 "query" => $query,
       
    27                 "aggs" => [
       
    28                     "languages" => [
       
    29                         "terms" => [ "field" => "language", "order" => [ "_count" => "desc" ], "size" => 0 ]
       
    30                     ]
       
    31                 ]
       
    32             ]
       
    33         ];
       
    34 
       
    35         $esRes = Es::search($esQuery);
    36 
    36 
    37         $languages = [];
    37         $languages = [];
    38         foreach ($docs as $row) {
    38 
    39             $languages[$row->lang->getUri()] = $row->count->getValue();
    39         foreach ($esRes['aggregations']['languages']['buckets'] as $b) {
       
    40             $languages[$b['key']] = $b['doc_count'];
    40         }
    41         }
    41 
    42 
    42         return response()->json(['languages' => $languages ]);
    43         return response()->json(['languages' => $languages ]);
    43 
    44 
    44     }
    45     }