Full-Text em outros bancos e ecossistema
Quem mais se beneficia de Full-Text
Matriz: MariaDB, SQL Server, Elasticsearch/OpenSearch, Meilisearch, Typesense — quando cada um faz sentido.
Nesta aula você vai
- Comparar FTS embutido em SGBDs versus motores dedicados
- Escolher entre MariaDB, SQL Server, OpenSearch, Meilisearch e Typesense por contexto
- Montar uma matriz de decisão por volume, relevância, equipe e custo
Quem mais se beneficia de Full-Text
Objetivos
Nesta aula você vai:
- Comparar FTS embutido em SGBDs versus motores dedicados
- Escolher entre MariaDB, SQL Server, OpenSearch, Meilisearch e Typesense por contexto
- Montar uma matriz de decisão por volume, relevância, equipe e custo
Introdução
Full-text não é um produto — é uma capacidade. Às vezes mora no banco (MariaDB, SQL Server, Postgres, SQLite/D1). Às vezes exige motor dedicado (OpenSearch, Meilisearch, Typesense). Esta aula fecha o panorama “outros bancos” com uma matriz pragmática de benefício.
Conteúdo
Duas famílias
- FTS no SGBD: menos peças, transação próxima dos dados, relevância lexical “boa o suficiente”.
- Motor dedicado: analyzers, facetas, typo-tolerance, escala de QPS de busca, times de search/platform.
Matriz resumida
| Tecnologia | Melhor para | Evite quando |
|---|---|---|
| MariaDB FTS | Apps LAMP/SQL já em MariaDB; FULLTEXT em InnoDB | Relevância/facetas de e-commerce grande |
| SQL Server FTS | Ecossistema Microsoft; catálogos corporativos | Time sem DBA SQL Server; necessidade open-source portátil |
| Elasticsearch / OpenSearch | Alto volume, facetas, pipelines, observabilidade de busca | Time pequeno sem orçamento de operação |
| Meilisearch | DX rápida, typo-tolerance, busca de produto/docs | Compliance que exige stack já homologada só ES |
| Typesense | Busca tipada, filtros rápidos, self-host simples | Já tem OpenSearch maduro e não quer mais um motor |
Postgres/tsvector (referência) |
SaaS SQL-first | Semântica pura sem extensão/híbrido |
| SQLite FTS5 / D1 | Edge, embarcado, conjuntos de dados moderados | Bilhões de docs / analytics de query |
| MongoDB text / Atlas Search | Docs no Mongo; Atlas Search se relevância avançada | Cassandra-like wide-column sem índice de busca |
MariaDB
FULLTEXT em InnoDB com MATCH ... AGAINST (modos NATURAL LANGUAGE / BOOLEAN). Benefício alto se o app já é MariaDB e a busca é funcionalidade auxiliar. Benefício baixo se busca é o produto (marketplace global).
SQL Server
Full-Text Engine com catálogos, stoplists e CONTAINS/FREETEXT. Forte em empresas Windows/.NET com DBA. Integração com FileTable/documentos. Custo de licenciamento e operação entram na decisão.
Elasticsearch / OpenSearch
Quem mais se beneficia: marketplaces, logs + busca, portais com facetas, multi-tenant com analyzers custom. Exige capacidade de cluster, mapping e reindex. OpenSearch é fork compatível comum em cloud.
Meilisearch e Typesense
Quem mais se beneficia: startups e produtos que querem UX de busca moderna (typos, ranking sensato) sem equipe de Lucene. Menos peças que um cluster ES. Avalie: persistência, HA, multitenancy e requisitos de compliance.
Critérios de decisão (lista de verificação rápida)
- Volume de docs e QPS de busca — SGBD aguenta?
- Relevância — lexical basta ou precisa typo/sinônimos/semântica?
- Facetas / filtros combinados — motor dedicado brilha.
- Equipe — DBA SQL vs platform search vs “só o app”.
- Custo — licença + RAM + reindex + on-call.
- Localidade dos dados — edge (D1) vs região única vs multi-região.
Busca auxiliar + SQL já existe → FTS do SGBD / FTS5
UX de busca é diferencial + time pequeno → Meilisearch / Typesense
Escala + facetas + analytics → OpenSearch / Elasticsearch
Significado / similaridade → Vetores (ex.: Vectorize) ± lexical
Exemplos práticos
-- MariaDB (ilustrativo)
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
body TEXT,
FULLTEXT KEY ft_posts (title, body)
) ENGINE=InnoDB;
SELECT id, title,
MATCH(title, body) AGAINST ('cloudflare D1' IN NATURAL LANGUAGE MODE) AS score
FROM posts
WHERE MATCH(title, body) AGAINST ('cloudflare D1' IN NATURAL LANGUAGE MODE)
ORDER BY score DESC
LIMIT 20;
-- SQL Server (ilustrativo)
SELECT id, title
FROM dbo.Articles
WHERE CONTAINS((title, body), 'FTS5 AND D1')
ORDER BY id DESC;
// Meilisearch — indexação e busca
await index.addDocuments([
{ id: 1, title: 'FTS5 no D1', body: 'Busca na edge' },
]);
const hits = await index.search('busca edge', { limit: 20 });
Problemas e como resolver
| Problema | Causa | Mitigação |
|---|---|---|
| Dois motores de verdade | Busca e OLTP divergentes | Um SoR + sync; aliases de reindex |
| Excesso de engenharia | ES para 5 mil docs | FTS do banco primeiro |
| Engenharia insuficiente | LIKE em 50 M linhas | Índice FTS ou motor dedicado |
| Time sem SRE | Cluster ES abandonado | Managed search ou Meili/Typesense |
Resumo
Benefício máximo vem do encaixe: FTS no SGBD quando a busca é auxiliar; Meilisearch/Typesense quando a UX importa e o time é enxuto; OpenSearch/ES quando escala e facetas dominam. A próxima trilha foca medição, antipadrões e checklist de arquitetura em produção.