Búsqueda de texto completo
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;Oracle Text (antes interMedia) proporciona búsqueda de texto completo sensible al idioma mediante un índice CONTEXT. El operador CONTAINS admite operadores de búsqueda como AND/OR/NEAR. El índice se mantiene con CTX_DDL.SYNC_INDEX o con 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;La búsqueda de texto completo integrada de PostgreSQL compara tsvector (documento) con tsquery (consulta) mediante el operador @@. Un índice GIN acelera las búsquedas sobre textos grandes. La configuración de idioma ('english') realiza el stemming y el tratamiento 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);Un índice FULLTEXT de MySQL se consulta con la sintaxis MATCH ... AGAINST. IN NATURAL LANGUAGE MODE devuelve una puntuación de relevancia; IN BOOLEAN MODE da un control detallado con los operadores +/-/*. InnoDB admite la búsqueda de texto completo a partir de 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"');Full-Text Search de SQL Server necesita primero un Full-Text Catalog y luego un Full-Text Index en la tabla (es obligatorio un KEY INDEX único). CONTAINS admite búsqueda exacta/por proximidad y operadores lógicos; FREETEXT admite búsqueda por significado (lingüística). El componente Full-Text Search debe 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" } })Un índice de texto de MongoDB proporciona búsqueda de texto completo mediante el operador $text; una colección solo puede tener un índice de texto. El metacampo textScore da la relevancia. Para búsquedas más avanzadas se usa Atlas Search ($search, basado en 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"Redis básico no ofrece búsqueda de texto completo; el módulo RediSearch (incluido en Redis Stack) proporciona la indexación con FT.CREATE y la búsqueda con FT.SEARCH. Se admiten stemming, búsqueda difusa, filtrado y ordenación. Sin el módulo instalado, la función no está disponible.
Elasticsearch
# Elasticsearch is natively a full-text search engine.
# match query (analyzed text search):
GET article/_search
{
"query": {
"match": { "content": "database performance" }
}
}Elasticsearch es fundamentalmente un motor de búsqueda de texto completo construido sobre Lucene; los campos text se analizan en tiempo de indexación (tokenización, stemming). La consulta match devuelve resultados ordenados por puntuación de relevancia (_score). Se pueden asignar analizadores específicos por idioma (p. ej., 'english').