Busca full-text
Oracle
-- Oracle Text: create a CONTEXT index
CREATE INDEX article_idx ON article(content) INDEXTYPE IS CTXSYS.CONTEXT;
-- Search with CONTAINS (label 1 ties CONTAINS to SCORE):
SELECT id, SCORE(1) FROM article
WHERE CONTAINS(content, 'database AND performance', 1) > 0
ORDER BY SCORE(1) DESC;O Oracle Text (antes interMedia) fornece busca full-text sensível ao idioma por meio de um índice CONTEXT. O operador CONTAINS suporta operadores de busca como AND/OR/NEAR. O índice é mantido com CTX_DDL.SYNC_INDEX ou SYNC automático.
PostgreSQL
-- Search with tsvector/tsquery, accelerated by a GIN index:
CREATE INDEX article_fts_idx ON article
USING GIN (to_tsvector('english', content));
SELECT id, ts_rank(to_tsvector('english', content), q) AS score
FROM article, to_tsquery('english', 'database & performance') q
WHERE to_tsvector('english', content) @@ q
ORDER BY score DESC;A busca full-text nativa do PostgreSQL compara tsvector (documento) com tsquery (consulta) usando o operador @@. Um índice GIN acelera buscas em textos grandes. A configuração de idioma ('english') faz stemming e tratamento de stop words.
MySQL
-- Create a FULLTEXT index (InnoDB/MyISAM):
ALTER TABLE article ADD FULLTEXT INDEX ft_content (content);
-- Search in natural language / boolean mode:
SELECT id, MATCH(content) AGAINST('database performance') AS score
FROM article
WHERE MATCH(content) AGAINST('+database +performance' IN BOOLEAN MODE);Um índice FULLTEXT do MySQL é consultado com a sintaxe MATCH ... AGAINST. IN NATURAL LANGUAGE MODE retorna um score de relevância; IN BOOLEAN MODE dá controle refinado com os operadores +/-/*. O InnoDB suporta busca full-text a partir do 5.6.
SQL Server
-- Create a Full-Text Catalog and index:
CREATE FULLTEXT CATALOG ft_catalog;
CREATE FULLTEXT INDEX ON dbo.article(content)
KEY INDEX PK_article ON ft_catalog;
-- Search with CONTAINS / FREETEXT:
SELECT id FROM dbo.article
WHERE CONTAINS(content, '"database" AND "performance"');O Full-Text Search do SQL Server precisa primeiro de um Full-Text Catalog e depois de um Full-Text Index na tabela (um KEY INDEX único é obrigatório). CONTAINS suporta busca exata/por proximidade e operadores lógicos; FREETEXT suporta busca por significado (linguística). O componente Full-Text Search deve estar instalado.
MongoDB
// Create a text index:
db.article.createIndex({ content: "text" })
// Search with $text and sort by relevance score:
db.article.find(
{ $text: { $search: "database performance" } },
{ score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } })Um índice text do MongoDB fornece busca full-text pelo operador $text; uma coleção pode ter apenas um índice text. O meta campo textScore fornece a relevância. Para buscas mais avançadas, usa-se o Atlas Search ($search, baseado em Lucene).
Redis
# Requires the RediSearch module (Redis Stack).
# Define the index:
FT.CREATE article_idx ON HASH PREFIX 1 article: SCHEMA content TEXT
# Full-text search:
FT.SEARCH article_idx "database performance"O Redis core não oferece busca full-text; o módulo RediSearch (incluído no Redis Stack) fornece indexação com FT.CREATE e busca com FT.SEARCH. Stemming, busca fuzzy, filtragem e ordenação são suportados. Sem o módulo instalado, o recurso não está disponível.
Elasticsearch
# Elasticsearch is natively a full-text search engine.
# match query (analyzed text search):
GET article/_search
{
"query": {
"match": { "content": "database performance" }
}
}O Elasticsearch é fundamentalmente um mecanismo de busca full-text construído sobre o Lucene; os campos text são analisados no momento da indexação (tokenização, stemming). A consulta match retorna resultados ordenados pelo score de relevância (_score). Podem ser atribuídos analyzers específicos de idioma (ex.: 'english').