====== Syntaxe des filtres ======
Définir un filtre permet de mettre en place une préselection des fiches : la recherche ne portera que sur les fiches répondant préalablement aux critères de cette sélection. Les filtres peuvent être également utilisés lors de la simple sélection de fiches (sans recherche sur un terme particulier), voir la requête JSON [[[serveurscrutari:json:type_fiche|type = fiche]].
Le nom du paramètre pour préciser le filtre est //flt//
On rappelera que la recherche peut aussi être limitée par les paramètre //corpuslist//, //baselist// et //corpuslist// qui portent, eux, sur les corpus retenus pour la recherche.
===== Filtre sur un mot-clé =====
Le filtre sur un mot-clé filtre toutes les fiches indexées par ce mot-clé. Il est indiqué par le préfixe //motcle:// suivi de l'identifiant du mot-clé, celui-ci pouvant être sous la forme du code du mot-clé, sous la forme de l'URI ou sous une forme mixte code d'un mot-clé, comme indiqué à la page [[serveurscrutari:json:commun|Paramètres communs]].
Par exemple :
flt=motcle:256
flt=motcle:/e17a05b0-c45e-11d8-9669-0800200c9a66/gouvafrique/geo/24
flt=motcle:2/geo/24
===== Filtre sur un thésaurus =====
Le filtre sur un thésaurus filtre toutes les fiches indexées par un mot-clé de ce thésaurus. Il est indiqué par le préfixe //thesaurus:// suivi de l'identifiant du thésaurus, celui-ci pouvant être sous la forme du code du thésaurus, sous la forme de l'URI ou sous une forme mixte code d'un thésaurus, comme indiqué à la page [[serveurscrutari:json:commun|Paramètres communs]].
Par exemple :
flt=thesaurus:33
flt=thesaurus:/e17a05b0-c45e-11d8-9669-0800200c9a66/gouvafrique/geo
flt=thesaurus:2/geo
===== Filtre sur la date =====
Le filtre sur une date est indiqué par le préfixe //date:// suivi de la définition d'une période.
La syntaxe d'une période est inspirée de la norme ISO. Une période peut être précisée soit par une indication temporelle seule ou par deux indications temporelles séparées par une barre oblique. Par indication temporelle, on entend une des expressions suivantes :
* Une année
* Un semestre (année suivi d'un tiret et S1 (premier semestre) ou S2 (deuxième semestre))
* Un trimestre (année suivi d'un tiret et T1, T2, T3, T4 pour les quatre trimestres)
* Un mois (année suivi du mois sur deux chiffres avec un tiret séparateur)
* Un jour (format ISO : année tiret mois tiret jour)
Voici une série d'exemples :
flt=date:2012 //conserve uniquement les fiches de 2012
flt=date:2012/2012-05 //conserve les cinq premiers mois de 2012
flt=date:2011-T2/2012-T1 // du deuxième trimestre 2011 au premier trimestre 2012
flt=date:2013-02 //mois de février 2013
flt=date:2013-04/2013-12-05 //du mois d'avril 2013 au 5 décembre 2013
Pour indiquer une période minimum, il faut donner une indication temporelle suivi d'une barre oblique et d'un tiret. Pour une période maxium, il faut précéder l'indication temporelle par un tiret et une barre oblique.
flt=date:2011/- //de 2011 à nos jours
flt=date:-/2013-11 //jusqu'au mois de novembre 2013
Enfin, il existe une valeur spéciale //NULL// qui permettre d'établir un filtre sur les fiches sans date.
===== Filtre sur un rectangle de coordonnées =====
Ce filtre s'applique aux fiches qui possèdent des coordonnées géographiques. Il est indiqué par le préfixe //bbox:// suivi de la définition de la portion qui suit la syntaxe de l'API OpenStreetmap (http://wiki.openstreetmap.org/wiki/Bbox) à savoir quatre valeurs dans l'ordre suivant : //left, bottom, right, top//.
//bottom// doit êre d'une valeur inférieure à //top//. //left// peut être supérieur à //right// lorsque le rectangle chevauche la ligne de changement de date.
flt=bbox:5.9559,45.818,10.4921,47.8084 //Rectangle englobant la Suisse
Le filtre //bbox// peut avoir une valeur particulière //*// qui indique que le filtre se fait sur toutes les fiches qui possèdent des coordonnées géographiques .
flt=bbox:* //Uniquement les fiches qui ont des coordonnées géographiques
===== Filtre aux alentours d'un point =====
Ce filtre permet de sélectionner des fiches disposant de coordonnées géographiques situées dans un rayon donné autour d'un point géographique. Il est indiqué par le préfixe //circle:// suivi de trois valeurs : la latitude du point, la longitude du point, le rayon en kilomètres.
flt=circle:48.856578,2.351828,50 //Fiches dans un rayon de cinquante kilomètres autour de Paris
===== Filtre sur une recherche précédente =====
Le filtre sur une recherche précédente est indiqué par le préfixe //qid:// suivi de l'identifiant de la recherche (fourni par la propriéte //qId// de l'objet //ficheSearchResult// dans la requête JSON [[serveurscrutari:json:type_qfiche|type = q-fiche]]. Ce filtre n'impacte que les fiches sur lesquelles porte la nouvelle recherche, les filtres et options de la recherche précédente ne sont pas pris en compte.
Exemple :
flt=qid:2013-0416-2229-1
===== Filtre sur les derniers ajouts dans la base =====
Ce filtre permet de sélectionner des fiches parmi les dernières rajoutées dans la base. Il est indiqué par le préfixe //add:// que l'on devra faire suivre par une des formes suivantes :
* //d-N// où N est un entier strictement positif : sélectionne les fiches ajoutées les N derniers jours (en partant du jour en cours)
* //f-P// où P est un entier strictement positif : sélectionne les P dernières fiches ajoutées (au minimum, il peut y en avoir plus car les fiches d'une même mise à jour sont toutes rajoutées même si cela dépasse ce minimum)
* //d-N,f-P// où N et P sont deux entiers strictement positifs : sélectionne d'abord les fiches ajoutées les N derniers jours puis si cela ne suffit pas, remonte les jours suivants jusqu'à obtenir P fiches (cela garantit qu'il y a toujours au minimum P fiches)
Exemple :
flt=add:d-5,f-30 (5 derniers jours avec au minimum 30 fiches, le résultat peut être largement supérieur à 30)
===== Filtre sur un corpus =====
Le filtre sur un corpus filtre toutes les fiches appartenant à un corpus donné. Il est indiqué par le préfixe //corpus:// suivi de l'identifiant du corpus, celui-ci pouvant être sous la forme du code du corpus, sous la forme de l'URI ou sous une forme mixte (code de la base + nom du corpus), comme indiqué à la page [[serveurscrutari:json:commun|Paramètres communs]].
Par exemple :
flt=corpus:33
flt=corpus:/e17a05b0-c45e-11d8-9669-0800200c9a66/ess/document
flt=corpus:1/document
**Note :** le filtre sur un corpus est moins efficace que l'utilisation du paramètre //corpuslist// qui filtre les fiches en amont de la recherche alors que celui-ci les filtre en aval. //corpuslist// a pour défaut d'être tout ou rien (cette fiche est dans le corpus ou non), ce filtre //corpus:// a l'avantage de pouvoir être combiné à d'autres filtres.
===== Filtre sur une base =====
Le filtre sur une base filtre toutes les fiches appartenant à une base donnée. Il est indiqué par le préfixe //base:// suivi de l'identifiant de la base, celui-ci pouvant être sous la forme du code de la bose, sous la forme de l'URI, comme indiqué à la page [[serveurscrutari:json:commun|Paramètres communs]].
Par exemple :
flt=base:1
flt=base:/e17a05b0-c45e-11d8-9669-0800200c9a66/ess
**Note :** le filtre sur une base est moins efficace que l'utilisation du paramètre //baselist// qui filtre les fiches en amont de la recherche alors que celui-ci les filtre en aval. //baselist// a pour défaut d'être tout ou rien (cette fiche est dans la base ou non), ce filtre //base:// a l'avantage de pouvoir être combiné à d'autres filtres.
===== Filtre sur une langue =====
Le filtre sur une langue filtre toutes les fiches dans une langue donnée. Il est indiqué par le préfixe //lang://. La valeur du filtre doit être un code de langue valide.
Par exemple :
flt=lang:fr
**Note :** le filtre sur une langue est moins efficace que l'utilisation du paramètre //langlist// qui filtre les fiches en amont de la recherche alors que celui-ci les filtre en aval. //langlist// a pour défaut d'être tout ou rien (cette fiche est dans la langue ou non), ce filtre //lang:// a l'avantage de pouvoir être combiné à d'autres filtres.
===== Filtre sur un attribut =====
Il est possible de faire un filtre sur n'importe quel attribut en utilisant le nom de l'attribut suivi d'un deux-points. Le caractère //*// peut être utilisé en début ou en fin de chaine pour filtrer une valeur commençant ou terminant par la valeur demandée.
Le caractère //*// peut être utilisé seul pour filtrer les fiches qui possèdent l'attribut, quelque soit la valeur.
Par exemple :
flt=sct:authors:* //toutes les fiches qui ont l'attribut sct:authors
flt=fph:nomenclature:F3* //Toutes les fiches qui ont un attribut fph:nomenclature commençant par F3
**Note :** ce filtre se comporte différmment de l'utilisation des attributs dans la recherche avancée. Dans le cas du filtre, la recherche se fait sur le terme exact (pas de prise en compte de la casse, présence de l'espace prise en compte) alors que dans le cas d'une recherche casse et accents ne sont pas pris en compte.
===== Combinaison de filtres =====
Les filtres peuvent être combinés en utilisant les opérateurs logiques suivants :
* && : Et
* || : Ou
* ! : Non
On utilise les parenthèses pour les regroupements.
Le filtre de l'exemple suivant va sélectionner les fiches de 2013 qui sont soit indexées par le mot-clé 254 soit n'appartiennent pas à la recherche 20130416-3.
flt=date:2013 && (motcle:254 || !qid:20130416-3)
===== Raccourcis de filtre =====
En plus du paramètre //flt//, il est possible d'utiliser les raccourcis suviant qui permettent de se dispenser d'indiquer le préfixe principal :
* //flt-motcle// évite d'utiliser le préfixe //motcle:// pour les mots-clés (anciennement //flt-indexation// qui est toujours accepté)
* //flt-thesaurus// évite d'utiliser le préfixe //thesaurus:// pour les thésaurus
* //flt-date// évite d'utiliser le préfixe //date:// pour les dates
* //flt-qid// évite le préfixe //qid:// pour les recherches
* //flt-add// évite le préfixe //add:// pour les derniers ajouts
* //flt-bbox//évite le préfixe //bbox:// pour les rectangles de coordonnées
* //flt-circle// évite le préfixe //circle:// pour les coordonnées aux alentours d'un point
* //flt-corpus// évite le préfixe //corpus:// pour l"appartenance à un corpus
* //flt-base// évite le préfixe //base:// pour l'appartenance à une base
* //flt-lang//évite le préfixe //lang:// pour la langue de la fiche
* //flt-{nom de l'attribut}// : évite d'utiliser le nom de l'attribut
L'exemple précédent peut donc s'écrire également :
flt-motcle=date:2013 && (254 || !qid:20130416-3)
flt-date=2013 && (motcle:254 || !qid:20130416-3)
flt-qid=date:2013 && (motcle:254 || !20130416-3)
Ces raccourcis sont utiles lorsque l'on combine un nombre important de filtres du même type.
Ces raccourcis peuvent être utilisés en même temps et ils se cumulent également avec le paramètre //flt//. Dans ce cas-là, l'opération logique entre les filtres est « Et ». Ces raccourcis ainsi que le paramètre //flt// ont comme particularité de pouvoir être répétés dans la requête, toutes les valeurs sont prises en compte. Les deux expressions ci-dessous sont équivalentes :
?flt-motcle=254&flt-motcle=307
?fl-motcle=254+%26%26+307 (254+%26%26+307 est le codage URI de 254 && 307)