Skip to main content
View as Markdown

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 AD. 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 }

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.

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é