10 use CorpusParole\Libraries\Filters\CorpusFilterManager; |
10 use CorpusParole\Libraries\Filters\CorpusFilterManager; |
11 |
11 |
12 |
12 |
13 class DateStatsController extends Controller |
13 class DateStatsController extends Controller |
14 { |
14 { |
15 /** |
15 private function getStatQuery($query) { |
16 * Display the specified resource. |
16 return [ |
17 * |
|
18 * @return \Illuminate\Http\Response |
|
19 */ |
|
20 public function index(Request $request) |
|
21 { |
|
22 |
|
23 |
|
24 $filterManager = new CorpusFilterManager(); |
|
25 $filters = $filterManager->prepareFilters($request); |
|
26 unset($filters['dates']); |
|
27 $qFilterParts = $filterManager->buildESFilters($filters); |
|
28 |
|
29 $query = $filterManager->buildQuery($qFilterParts); |
|
30 |
|
31 $esQuery = [ |
|
32 'index' => config('elasticsearch.index'), |
17 'index' => config('elasticsearch.index'), |
33 'body' => [ |
18 'body' => [ |
34 "size" => 0, |
19 "size" => 0, |
35 "query" => $query, |
20 "query" => $query, |
36 "aggs" => [ |
21 "aggs" => [ |
58 ] |
43 ] |
59 ] |
44 ] |
60 ] |
45 ] |
61 ] |
46 ] |
62 ]; |
47 ]; |
|
48 } |
|
49 |
|
50 private function getMinMaxQuery($query) { |
|
51 return [ |
|
52 'index' => config('elasticsearch.index'), |
|
53 'body' => [ |
|
54 "size" => 0, |
|
55 "query" => $query, |
|
56 "aggs" => [ |
|
57 "datestats" => [ |
|
58 "nested"=> [ |
|
59 "path" => "creation_years" |
|
60 ], |
|
61 "aggs" => [ |
|
62 "minyear" => [ |
|
63 "min" => [ "field"=> "creation_years.year" ] |
|
64 ], |
|
65 "maxyear" => [ |
|
66 "max" => [ "field"=> "creation_years.year" ] |
|
67 ] |
|
68 ] |
|
69 ] |
|
70 ] |
|
71 ] |
|
72 ]; |
|
73 } |
|
74 |
|
75 private function getDocQuery(Request $request) { |
|
76 $filterManager = new CorpusFilterManager(); |
|
77 $filters = $filterManager->prepareFilters($request); |
|
78 unset($filters['dates']); |
|
79 $qFilterParts = $filterManager->buildESFilters($filters); |
|
80 |
|
81 return $filterManager->buildQuery($qFilterParts); |
|
82 } |
|
83 |
|
84 /** |
|
85 * Display the min max date stats |
|
86 */ |
|
87 public function minmax(Request $request) { |
|
88 $query = $this->getDocQuery($request); |
|
89 |
|
90 $esQuery = $this->getMinMaxQuery($query); |
|
91 $esRes = Es::search($esQuery); |
|
92 |
|
93 $datestats = []; |
|
94 |
|
95 $max = intval($esRes['aggregations']['datestats']['maxyear']['value']); |
|
96 $min = intval($esRes['aggregations']['datestats']['maxyear']['value']); |
|
97 |
|
98 return response()->json(['dateminmax' => [ $min, $max ] ]); |
|
99 } |
|
100 |
|
101 /** |
|
102 * Display the dates stats |
|
103 * |
|
104 * @return \Illuminate\Http\Response |
|
105 */ |
|
106 public function index(Request $request) |
|
107 { |
|
108 |
|
109 $query = $this->getDocQuery($request); |
|
110 |
|
111 $esQuery = $this->getStatQuery($query); |
63 $esRes = Es::search($esQuery); |
112 $esRes = Es::search($esQuery); |
64 |
113 |
65 $datestats = []; |
114 $datestats = []; |
66 |
115 |
67 foreach($esRes['aggregations']['datestats']['years']['buckets'] as $bucket) { |
116 foreach($esRes['aggregations']['datestats']['years']['buckets'] as $bucket) { |