typestar

Mantener sincronizado un índice de búsqueda en SQL

El índice no debe ser una segunda copia de la verdad: apúntalo a la tabla y mantenlo al día.

CREATE VIRTUAL TABLE posts_fts USING fts5(
    title,
    body,
    content = 'posts',
    content_rowid = 'id'
);

CREATE TRIGGER posts_fts_insert
AFTER INSERT ON posts
BEGIN
    INSERT INTO posts_fts (rowid, title, body)
    VALUES (NEW.id, NEW.title, NEW.body);
END;

CREATE TRIGGER posts_fts_delete
AFTER DELETE ON posts
BEGIN
    INSERT INTO posts_fts (posts_fts, rowid, title, body)
    VALUES ('delete', OLD.id, OLD.title, OLD.body);
END;

Cómo funciona

  1. content= hace de la tabla la fuente del contenido; el índice guarda solo términos.
  2. Tres triggers lo mantienen al día: insert, delete, y update como delete más insert.
  3. Un borrado se escribe como el insert de la fila especial de comando 'delete'.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
413
Tokens
94
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 59 segundos.

Escribe este fragmento

Paso 4 de 4 en Búsqueda de texto completo; paso 12 de 14 en JSON y búsqueda.

← Anterior Siguiente →