Skip to main content
View as Markdown

Présentation de la recherche

La recherche Sovrium n'est pas un domaine de fonctionnalité autonome. Elle étend les schémas que vous utilisez déjà : les tables déclarent ce qui est cherchable (pondérations de champs, indexation), et les composants de page déclarent comment la recherche se comporte (moteur, anti-rebond, surlignage, affichage des résultats). Il n'y a pas de configuration app.search de premier niveau — la configuration vit là où elle est utilisée.

Le backend est entièrement bâti sur PostgreSQL : la recherche plein texte (tsvector/tsquery) plus l'extension pg_trgm pour une correspondance floue, tolérante aux fautes de frappe. Pas d'Elasticsearch, pas d'Algolia, pas de service externe — la recherche reste à l'intérieur de votre propre base de données, conformément au principe de souveraineté numérique de Sovrium.

Moteurs de recherche

Une source de données en mode: 'search' sélectionne son backend avec searchEngine. La même table peut utiliser des moteurs différents sur des pages différentes.

Moteur Où il s'exécute Idéal pour
client JavaScript du navigateur Petits jeux de données déjà chargés dans la page ; instantané, sans aller-retour. Par défaut.
fts FTS PostgreSQL Pertinence classée côté serveur sur du texte indexé ; grands jeux de données.
trigram pg_trgm PostgreSQL Correspondance floue et tolérance aux fautes de frappe ; requêtes partielles/mal orthographiées.
hybrid FTS PostgreSQL + trigram FTS pour la pertinence avec un repli flou trigram ; le meilleur des deux.

client — filtrage dans le navigateur

Filtrage JavaScript dans le navigateur. Les enregistrements sont déjà récupérés, et la requête les restreint en mémoire. Aucun aller-retour serveur, mais l'ensemble du jeu de résultats doit tenir dans la page. À utiliser pour les petites listes de référence et les sélecteurs.

- type: data-table
  dataSource:
    table: products
    mode: search
    searchFields: [name, description]
    searchEngine: client
    debounceMs: 300

fts — recherche plein texte PostgreSQL

Recherche classée côté serveur utilisant tsvector/tsquery. Les résultats reviennent triés par pertinence, pondérés par le searchWeight de chaque champ. Requiert que les champs cherchés soient indexed: true. À utiliser pour les grands jeux de données riches en texte où le classement importe.

- type: data-table
  dataSource:
    table: articles
    mode: search
    searchFields: [title, body]
    searchEngine: fts
    debounceMs: 300
    limit: 20

trigram — correspondance floue

Utilise l'extension pg_trgm pour faire correspondre les trigrammes de caractères, tolérant les fautes de frappe et les mots partiels. Idéal quand les utilisateurs font des fautes ou tapent des fragments (par ex. prodct correspond toujours à product). Voir full-text-search pour les détails d'indexation.

- type: data-table
  dataSource:
    table: products
    mode: search
    searchFields: [name]
    searchEngine: trigram

hybrid — pertinence plus tolérance

Combine le FTS pour le classement par pertinence avec le trigram comme repli flou, de sorte que les correspondances exactes et classées remontent en premier tandis que les requêtes mal orthographiées renvoient quand même des résultats. Le moteur le plus indulgent pour la recherche destinée à l'utilisateur final.

- type: data-table
  dataSource:
    table: products
    mode: search
    searchFields: [name, description]
    searchEngine: hybrid
    debounceMs: 300
    limit: 50

La recherche est l'un des trois modes de source de données (list, single, search). Définir mode: 'search' transforme un composant lié à des données en une expérience de recherche interactive et anti-rebondie.

Propriété Description
table Table à interroger (validée par rapport à app.tables).
searchFields Tableau (≥ 1) de noms de champs sur lesquels chercher. Requis pour le mode recherche.
searchEngine Backend : client (par défaut), fts, trigram ou hybrid.
debounceMs Délai d'anti-rebond pour la saisie de recherche en millisecondes (entier ≥ 0), par ex. 300, 500.
limit Nombre maximal de résultats à renvoyer (entier ≥ 1), par ex. 10, 20, 50.
bindTo ID d'un composant searchInput dont la requête pilote cette source de données (liaison inter-composants).
filter Conditions de filtre (logique ET) appliquées aux côtés de la requête de recherche.
sort Règles de tri appliquées aux résultats.
refreshMode Comment les résultats se rafraîchissent après le chargement : none (par défaut), poll ou realtime.
# Interactive search with debounce and a result limit
- type: data-table
  dataSource:
    table: products
    mode: search
    searchFields: [name, description]
    searchEngine: hybrid
    debounceMs: 300
    limit: 20

Pour le filtrage et le tri statiques de résultats hors recherche, utilisez le mode list avec filter/sort à la place — voir records-filtering-sorting.

Choisir une approche

Besoin Utiliser
Restreindre une petite liste déjà sur la page searchEngine: client
Classer de grands jeux de données textuelles par pertinence searchEngine: fts + indexed: true + searchWeight
Tolérer les fautes de frappe et les mots partiels searchEngine: trigram
À la fois classement par pertinence et tolérance aux fautes searchEngine: hybrid
Chercher le contenu de pages statiques à l'échelle du site pageSearch component — voir search-components
Définir quels champs sont cherchables et comment ils sont pondérés Config au niveau du champ — voir full-text-search

Associé