Recherche de conventions

La recherche de conventions est la page d’accueil d’APiLos. Elle permet de retrouver une convention selon différents critères.

Principe de la recherche

Pour effectuer une recherche, l’utlisateur remplit le formulaire en haut de la page /recherche.

Après avoir complété le formulaire, la page de recherche va se recharger avec des query params supplémentaires dans l’url. Ces params sont des filtres qui vont être appliqués sur l’ensemble des conventions visibles pour l’utilisateur pour ne conserver que le résultat de la recherche.

Exemple si on recherche un numéro de convention 1234 en staging, l’url de la page devient https://siap-integration.apilos.beta.gouv.fr/conventions/recherche?order_by=&page=&search_operation_nom=&search_numero=1234&bailleur=&search_lieu=&cstatut=&financement=&date_signature=&nature_logement=. La plupart des paramètres sont vides, mais on trouve search_numero=1234. Le résultat d’une recherche est ainsi matérialisé par une url, mais attention, les conventions sont préalablement filtrées selon les habilitations de l’utilisateur. Deux utilisateurs consultant la même url de recherche ne verront pas les mêmes résultats, mais les mêmes filtres seront appliqués à leurs conventions visibles.

La logique de la recherche est située dans conventions/services/search.py.

Liste des filtres disponibles

Champ du formulaire

Filtre (en query param)

Nom de l’opération

search_operation_nom

Numéro de l’opération ou de la convention

search_numero

Bailleur (nom ou SIREN)

bailleur

Commune, code postal

search_lieu

Statut convention ou avenant

cstatut

Type de financement

financement

Année de signature

date_signature

Nature des logements

nature_logement

Ordre de la recherche

L’ordre présenté à l’utilisateur inclut deux paramètres : le score et la date de création de la convention. Le score est déterminé par _build_scoring, qui normalise le ranking déterminé par _build_ranking.

Différentes méthodes ont été testées empiriquement pour déterminer le ranking, des champs utilisent TrigramSimilarity, d’autres SearchRank. Le scoring rend comparable ces rankings obtenus par des méthodes différentes.

Filtre via les habilitations

L’échantillon de conventions sur lequel les filtres sont appliqués est obtenu par la méthode conventions du modèle User, qui se charge de réduire l’échantillon aux conventions visibles par l’utilisateur.

En général quand un utilisateur se plaint de ne pas retrouver une convention dans la recherche, c’est lié à des données géographiques qui ne concordent pas entre la convention et les habilitations de l’utilisateur. (code_insee_departement incorrect sur la convention, par exemple)

Variables d’environnement

La variable d’environnement DEBUG_SEARCH_SCORING permet d’avoir plus d’informations sur la manière dont est déterminée le score. Elle est utile localement et en staging, mais n’est pas adaptée à l’environnement de production car elle s’applique pour tous les utilisateurs, et affiche des logs sur la page de recherche.

TRIGRAM_SIMILARITY_THRESHOLD est une configuration qui permet de filtrer les résultats qui utilisent TrigramSimilarity qui ont un score trop faible. Si cette valeur est trop faible, la recherche affiche des résultats qui ont peu de pertinence, si elle est trop élevée elle n’autorise plus les fautes de frappes et imprécisions. La valeur par défaut a été expérimentalement placée à 0.3.