
# 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](/fr/docs/search-overview#search-engines).

## 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](/fr/docs/tables-overview#base-field-properties) 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. |

```yaml
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 }
```

:::callout
`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.

```yaml
- 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](/fr/docs/text-fields#rich-text) 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. |

:::callout
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).

```yaml
tables:
  - name: products
    fields:
      - { id: 1, name: name, type: single-line-text, indexed: true, searchWeight: A }
```

```yaml
# 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](/fr/docs/search-overview) — les quatre moteurs de recherche et le mode de source de données `search`.
- [Composants de recherche](/fr/docs/search-components) — `searchInput`, `list`, `pageSearch` et la recherche de barre d'outils.
- [Champs texte](/fr/docs/text-fields) — `rich-text`, `long-text` et l'indicateur `fullTextSearch`.
- [Présentation des tables](/fr/docs/tables-overview) — `indexed`, `searchWeight` et autres propriétés de base des champs.
