server/src/app/Http/Controllers/Api/LanguageController.php
author ymh <ymh.work@gmail.com>
Thu, 20 Oct 2016 19:14:37 +0200
changeset 378 5b47eab083f3
parent 377 52169c718513
child 406 cf0f23803a53
permissions -rw-r--r--
implement filters on stats controller, put all filter logic in CorpusFilterManager

<?php

namespace CorpusParole\Http\Controllers\Api;

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

use Es;

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

        $filterManager = new CorpusFilterManager();
        $filters = $filterManager->prepareFilters($request);
        unset($filters['language']);
        $qFilterParts = $filterManager->buildESFilters($filters);
        $query = $filterManager->buildQuery($qFilterParts);

        $esQuery = [
            'index' => env('ELASTICSEARCH_INDEX'),
            'body' => [
                "size" => 0,
                "query" => $query,
                "aggs" => [
                    "languages" => [
                        "terms" => [ "field" => "language", "order" => [ "_count" => "desc" ], "size" => 0 ]
                    ]
                ]
            ]
        ];

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

        $languages = [];

        foreach ($esRes['aggregations']['languages']['buckets'] as $b) {
            $languages[$b['key']] = $b['doc_count'];
        }

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

    }

}