server/src/app/Http/Controllers/Api/DiscourseController.php
changeset 377 52169c718513
parent 307 07b44a378ad8
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 CorpusParole\Http\Requests;
       
     6 use CorpusParole\Http\Controllers\Controller;
     5 use CorpusParole\Http\Controllers\Controller;
     7 
     6 
     8 use Illuminate\Http\Request;
     7 use Illuminate\Http\Request;
     9 use EasyRdf\Resource;
       
    10 use EasyRdf\Literal;
       
    11 
     8 
    12 use CorpusParole\Libraries\Sparql\SparqlClient;
     9 use Es;
    13 use CorpusParole\Services\LexvoResolverInterface;
       
    14 use CorpusParole\Services\BnfResolverInterface;
       
    15 
       
    16 
    10 
    17 class DiscourseController extends Controller
    11 class DiscourseController extends Controller
    18 {
    12 {
    19     private $sparqlClient = null;
       
    20 
       
    21     public function __construct(SparqlClient $sparqlClient) {
       
    22         $this->sparqlClient = $sparqlClient;
       
    23     }
       
    24 
    13 
    25     /**
    14     /**
    26      * Display the specified resource.
    15      * Display the specified resource.
    27      *
    16      *
    28      * @return \Illuminate\Http\Response
    17      * @return \Illuminate\Http\Response
    29      */
    18      */
    30     public function index(Request $request)
    19     public function index(Request $request)
    31     {
    20     {
    32 
    21 
    33         $query =  preg_replace('/\s+/', ' ', "SELECT (?o AS ?res) (COUNT(?s) AS ?count) WHERE {
    22         $query = [ "match_all" => []];
    34             ?s a <http://www.europeana.eu/schemas/edm/ProvidedCHO>.
       
    35             ?s <http://purl.org/dc/elements/1.1/type> ?o.
       
    36             FILTER(uri(?o) in (<".implode('>,<', array_keys(config('corpusparole.corpus_discourse_type'))).">))
       
    37         }
       
    38         GROUP BY ?o
       
    39         ORDER BY DESC(?count)");
       
    40 
    23 
    41         $docs = $this->sparqlClient->query($query);
    24         $esQuery = [
       
    25             'index' => env('ELASTICSEARCH_INDEX'),
       
    26             'body' => [
       
    27                 "size" => 0,
       
    28                 "query" => $query,
       
    29                 "aggs" => [
       
    30                     "discourses" => [
       
    31                         "terms" => [ "field" => "discourse_types", "order" => [ "_count" => "desc" ], "size" => 0 ]
       
    32                     ]
       
    33                 ]
       
    34             ]
       
    35         ];
       
    36 
       
    37         $esRes = Es::search($esQuery);
    42 
    38 
    43         $discourses = [];
    39         $discourses = [];
    44 
    40 
    45         foreach ($docs as $row) {
    41         foreach ($esRes['aggregations']['discourses']['buckets'] as $b) {
    46             $key = $row->res->getUri();
    42             $key = $b['key'];
    47             $count = $row->count->getValue();
    43             $count = $b['doc_count'];
    48             $label = config('corpusparole.corpus_discourse_type')[$key];
    44             $label = config('corpusparole.corpus_discourse_type')[$key];
    49             $discourses[$key] = [
    45             $discourses[$key] = [
    50                 "label" => $label,
    46                 "label" => $label,
    51                 "count" => $count
    47                 "count" => $count
    52             ];
    48             ];