diff --git a/Lib/Search/BookSearch.php b/Lib/Search/BookSearch.php index 105a2bb..e327543 100644 --- a/Lib/Search/BookSearch.php +++ b/Lib/Search/BookSearch.php @@ -59,6 +59,11 @@ class BookSearch $this->queryParts[] = $queryText; } + public function addRange($field, $min = '*', $max = '*') + { + $this->queryParts[] = sprintf('%s:[%s TO %s]', $field, $min, $max); + } + public function addSortField($field, $order = \SolrQuery::ORDER_DESC) { $this->query->addSortField($field, $order); diff --git a/NetBiblio.php b/NetBiblio.php index 62cb3dd..4616bc7 100644 --- a/NetBiblio.php +++ b/NetBiblio.php @@ -580,18 +580,29 @@ class NetBiblio extends WebService * ° queryText : the text to search for * ° queryType : the field to search in, defaults to 'text' * - * ° genre : array of 'genreCode' to search for * ° jeunesse : only display books for kids (must have format 'jeunesse' => array('filtrer' => 'filtrer') + * * ° producerCode : filter by 'producerCode' + * ° genreCode : filter by 'genreCode' + * ° author : filter by 'author' * ° reader : filter by 'reader' + * ° motsMatieres : filter by 'motsMatieres' + * + * ° duration : exact duration in hours, duration are saved as float in Solr + * ° durationMin : minimal duration in hours + * ° durationMax : maximal duration in hours * * ° count : number of results we want * ° page : page to start at (0 is the first) * + * Shortcuts : + * + * ° producer : synonym for 'producerCode' (see above) + * ° genre : synonym for 'genreCode' (see above) + * * Deprecated, but still in use on mobile apps : * * ° category : synonym for 'genre' (see above) - * ° producer : synonym for 'producerCode' (see above) * * Return value : * @@ -658,6 +669,14 @@ class NetBiblio extends WebService $bs->addQuery(1, 'jeunesse'); } + if(isset($queryArray['duration'])) { + $bs->addQuery($queryArray['duration'], 'duration'); + } else if(isset($queryArray['durationMin']) || isset($queryArray['durationMax'])) { + $min = isset($queryArray['durationMin']) ? $queryArray['durationMin'] : '*'; + $max = isset($queryArray['durationMax']) ? $queryArray['durationMax'] : '*'; + $bs->addRange('duration', $min, $max); + } + $availableFields = array('producerCode', 'genreCode', 'author', 'reader', 'motsMatieres'); foreach($availableFields as $q) { if(isset($queryArray[$q]) && (