Recherche plein texte
Les tables déclarent ce qui est cherchable. Trois propriétés au niveau du champ contrôlent comment un champ participe à la recherche : indexed le rend interrogeable, searchWeight classe sa pertinence, et fullTextSearch (sur rich-text) active l'indexation FTS pour le contenu formaté. Les composants choisissent ensuite le moteur qui les consomme — voir search-overview.
Propriétés des champs
| Propriété | S'applique à | Description |
|---|---|---|
indexed |
Tous les types de champs | Booléen. Crée un index de base de données sur le champ. Requis pour les moteurs fts, trigram et hybrid. |
searchWeight |
Tous les types de champs | A–D. Pondération de pertinence FTS PostgreSQL. Effectif uniquement lorsque indexed: true et que le moteur est fts ou hybrid. |
fullTextSearch |
rich-text |
Booléen. Active l'indexation de recherche plein texte pour le contenu formaté du champ. |
Ces propriétés étendent les propriétés de base des champs partagées par chaque type de champ.
Pondérations de pertinence des champs
searchWeight correspond directement aux pondérations FTS de PostgreSQL, ordonnant la force avec laquelle une correspondance dans chaque champ influence le rang de pertinence. Une correspondance de titre surclasse une correspondance de corps.
| Pondération | Pertinence | Champs typiques |
|---|---|---|
A |
La plus élevée | Titre, nom, accroche. |
B |
Élevée | Description, résumé, extrait. |
C |
Moyenne | Tags, catégories, libellés. |
D |
La plus basse | Notes internes, métadonnées, notes de bas de page. |
tables:
- name: articles
fields:
- { id: 1, name: title, type: single-line-text, indexed: true, searchWeight: A }
- { id: 2, name: summary, type: long-text, indexed: true, searchWeight: B }
- { id: 3, name: tags, type: single-line-text, indexed: true, searchWeight: C }
- { id: 4, name: body, type: rich-text, indexed: true, fullTextSearch: true, searchWeight: B }
searchWeight n'est significatif que lorsque le champ est indexed: true et qu'une source de données l'interroge avec searchEngine: 'fts' ou 'hybrid'. Avec les moteurs client ou trigram, la pondération est ignorée.
fullTextSearch sur le texte enrichi
Le champ rich-text stocke du HTML formaté. Définir fullTextSearch: true active l'indexation de recherche plein texte de son contenu textuel afin que le champ puisse participer aux requêtes fts/hybrid aux côtés des champs de texte brut.
- id: 5
name: article_content
type: rich-text
required: true
maxLength: 10000
fullTextSearch: true
searchWeight: B
toolbar: [bold, italic, link, heading, list]
Les champs long-text et single-line-text simples n'ont pas besoin de fullTextSearch — définissez indexed: true et un searchWeight, et ils sont prêts pour le FTS. L'indicateur fullTextSearch existe spécifiquement pour rich-text car sa valeur stockée est du balisage HTML plutôt que du texte brut. Voir text-fields pour l'ensemble complet des propriétés rich-text.
PostgreSQL vs SQLite
| Aspect | PostgreSQL | SQLite |
|---|---|---|
| Moteur FTS | tsvector/tsquery natif avec classement pondéré. |
Correspondance plus simple ; le classement pondéré est réduit. |
| Correspondance floue | Extension pg_trgm (trigram, tolérant aux fautes). |
Non disponible — le moteur trigram cible Postgres. |
searchWeight A–D |
Pleinement honoré dans le classement par pertinence. | Au mieux ; l'ordonnancement des pondérations peut être approximatif. |
| Recommandation | À utiliser pour une recherche fts/trigram/hybrid adossée à un index. |
Par défaut sans configuration ; concevez la recherche classée sur Postgres. |
SQLite est la base de données par défaut sans configuration de Sovrium. Pour une recherche de production qui dépend de la pertinence classée (searchWeight) ou de la correspondance floue (trigram/hybrid), exécutez contre PostgreSQL où tsvector et pg_trgm sont disponibles.
Correspondance floue trigram
L'extension pg_trgm décompose le texte en séquences de trois caractères (trigrammes) et fait correspondre sur le chevauchement, tolérant les fautes de frappe et les mots partiels. Cela alimente les moteurs trigram et hybrid. Un champ utilisé pour la recherche floue devrait être indexed: true afin que PostgreSQL puisse construire un index trigram (GIN/GiST).
tables:
- name: products
fields:
- { id: 1, name: name, type: single-line-text, indexed: true, searchWeight: A }
# Component side — fuzzy matching on the indexed field
- type: data-table
dataSource:
table: products
mode: search
searchFields: [name]
searchEngine: trigram
Une requête de prodct correspond toujours à product ; lapto correspond à laptop. Associez le trigram au FTS avec searchEngine: 'hybrid' pour conserver le classement par pertinence pour les termes exacts tout en conservant la tolérance aux fautes pour le reste.
Associé
- Présentation de la recherche — les quatre moteurs de recherche et le mode de source de données
search. - Composants de recherche —
searchInput,list,pageSearchet la recherche de barre d'outils. - Champs texte —
rich-text,long-textet l'indicateurfullTextSearch. - Présentation des tables —
indexed,searchWeightet autres propriétés de base des champs.