server/src/app/Repositories/RdfDocumentRepository.php
changeset 378 5b47eab083f3
parent 376 02f113d43f18
child 405 f239c8c5bb94
equal deleted inserted replaced
377:52169c718513 378:5b47eab083f3
   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'];