139 $sort = ["_doc"]; |
139 $sort = ["_doc"]; |
140 } elseif (is_string($sort)) { |
140 } elseif (is_string($sort)) { |
141 $sort = [$sort]; |
141 $sort = [$sort]; |
142 } |
142 } |
143 if(is_null($filters)) { |
143 if(is_null($filters)) { |
144 //$filters = ['language' => ["http://lexvo.org/id/iso639-3/oci", "http://lexvo.org/id/iso639-3/bre"]]; |
|
145 $filters = []; |
144 $filters = []; |
146 } |
145 } |
147 |
146 |
148 $qFilterParts = []; |
147 $filterManager = new CorpusFilterManager(); |
149 |
148 $qFilterParts = $filterManager->buildESFilters($filters); |
150 if(array_key_exists('language', $filters) && !empty($filters['language'])) { |
|
151 $languages = $filters['language']; |
|
152 if(is_string($languages)) { |
|
153 $languages = [ $languages, ]; |
|
154 } |
|
155 $languages = array_slice($languages, config('corpusparole.filter_max_languages_nb', 200)); |
|
156 $fp = CorpusFilterManager::getLanguagesFilterPart($languages); |
|
157 if(!empty($fp)) { |
|
158 $qFilterParts[] = $fp; |
|
159 } |
|
160 } |
|
161 if(array_key_exists('location', $filters) && !empty($filters['location'])) { |
|
162 $location = $filters['location']; |
|
163 if(is_array($location)) { |
|
164 $location = $location[0]; // we know it is not empty |
|
165 } |
|
166 $fp = CorpusFilterManager::getLocationFilterPart($location); |
|
167 if(!empty($fp)) { |
|
168 $qFilterParts[] = $fp; |
|
169 } |
|
170 |
|
171 } |
|
172 if(array_key_exists('themes', $filters) && !empty($filters['themes'])) { |
|
173 $themes = $filters['themes']; |
|
174 if(is_string($themes)) { |
|
175 $themes = [$themes,]; // we know it is not empty |
|
176 } |
|
177 $fp = CorpusFilterManager::getThemeFilterPart($themes); |
|
178 if(!empty($fp)) { |
|
179 $qFilterParts[] = $fp; |
|
180 } |
|
181 |
|
182 } |
|
183 if(array_key_exists('discourses', $filters) && !empty($filters['discourses'])) { |
|
184 $discourses = $filters['discourses']; |
|
185 if(is_string($discourses)) { |
|
186 $discourses = [$discourses,]; // we know it is not empty |
|
187 } |
|
188 $fp = CorpusFilterManager::getDiscourseFilterPart($discourses); |
|
189 if(!empty($fp)) { |
|
190 $qFilterParts[] = $fp; |
|
191 } |
|
192 |
|
193 } |
|
194 if(array_key_exists('dates', $filters) && !empty($filters['dates'])) { |
|
195 $dates = $filters['dates']; |
|
196 if(is_string($dates)) { |
|
197 $dates = [$dates,]; // we know it is not empty |
|
198 } |
|
199 $fp = CorpusFilterManager::getDateFilterPart($dates); |
|
200 if(!empty($fp)) { |
|
201 $qFilterParts[] = $fp; |
|
202 } |
|
203 } |
|
204 |
|
205 |
149 |
206 $query = [ |
150 $query = [ |
207 'index' => config('corpusparole.elasticsearch_index'), |
151 'index' => config('corpusparole.elasticsearch_index'), |
208 'body' => [ |
152 'body' => [ |
209 "size" => empty($limit)?0:$limit, |
153 "size" => empty($limit)?0:$limit, |
219 'must' => $qFilterParts |
163 'must' => $qFilterParts |
220 ] |
164 ] |
221 ] |
165 ] |
222 ] ]; |
166 ] ]; |
223 } |
167 } |
|
168 |
|
169 Log::debug("QUERY :"); |
|
170 Log::debug(json_encode($query, JSON_PRETTY_PRINT)); |
|
171 Log::debug("FILTERS :"); |
|
172 Log::debug(json_encode($filters, JSON_PRETTY_PRINT)); |
224 |
173 |
225 $esRes = Es::search($query); |
174 $esRes = Es::search($query); |
226 |
175 |
227 return ['total' => $esRes['hits']['total'], 'documents' => array_map(function($r) { |
176 return ['total' => $esRes['hits']['total'], 'documents' => array_map(function($r) { |
228 return $r['_id']; |
177 return $r['_id']; |