server/src/app/Http/Controllers/Api/DiscourseController.php
author ymh <ymh.work@gmail.com>
Tue, 20 Mar 2018 15:02:40 +0100
changeset 573 25f3d28f51b2
parent 465 9df336529b2f
permissions -rw-r--r--
Added tag 0.0.25 for changeset 190ae1dee68d

<?php

namespace CorpusParole\Http\Controllers\Api;

use CorpusParole\Http\Controllers\Controller;
use CorpusParole\Libraries\Filters\CorpusFilterManager;

use Illuminate\Http\Request;

use Es;

class DiscourseController extends Controller
{

    /**
     * Display the specified resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {

        $filterManager = new CorpusFilterManager();
        $filters = $filterManager->prepareFilters($request);
        //unset($filters['discourses']);
        $qFilterParts = $filterManager->buildESFilters($filters);

        $query = $filterManager->buildQuery($qFilterParts);



        $esQuery = [
            'index' => config('elasticsearch.index'),
            'body' => [
                "size" => 0,
                "query" => $query,
                "aggs" => [
                    "discourses" => [
                        "terms" => [ "field" => "discourse_types", "order" => [ "_count" => "desc" ], "size" => 2147483647 ]
                    ]
                ]
            ]
        ];

        $esRes = Es::search($esQuery);

        $discourses = [];

        foreach ($esRes['aggregations']['discourses']['buckets'] as $b) {
            $key = $b['key'];
            $count = $b['doc_count'];
            $label = config('corpusparole.corpus_discourse_type')[$key];
            $discourses[$key] = [
                "label" => $label,
                "count" => $count
            ];
        }

        return response()->json(['discourses' => $discourses ]);

    }

}