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.
Deux couches de recherche distinctes existent. La recherche d'enregistrements (cette page) interroge les données de table via le mode de source de données search et les quatre moteurs ci-dessous. La recherche de pages publiques indexe le contenu des pages statiques via le composant pageSearch — voir search-components. Ce sont des fonctionnalités différentes à des couches différentes.
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
searchEngine vaut client par défaut. Les moteurs fts, trigram et hybrid ne s'exécutent que dans PostgreSQL — ils requièrent un corpus indexé. Sur SQLite, le classement côté serveur se rabat sur une correspondance plus simple ; concevez la recherche adossée à un index contre Postgres. Voir full-text-search.
Le mode de source de données search
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é
- Recherche plein texte —
fullTextSearch,indexedetsearchWeightau niveau du champ. - Composants de recherche —
searchInput,pageSearch,list,commandet la recherche de barre d'outils. - Champs texte — l'indicateur
fullTextSearchdu champrich-text. - Présentation des tables — les propriétés de base des champs incluant
indexedetsearchWeight.