Recherche plein texte
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 (anciennement interMedia) fournit une recherche plein texte tenant compte de la langue via un index CONTEXT. L'opérateur CONTAINS prend en charge des opérateurs de recherche tels que AND/OR/NEAR. L'index est maintenu avec CTX_DDL.SYNC_INDEX ou le SYNC automatique.
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 recherche plein texte intégrée de PostgreSQL fait correspondre tsvector (document) et tsquery (requête) avec l'opérateur @@. Un index GIN accélère les recherches sur de grands textes. La configuration de langue ('english') gère la racinisation et les mots vides.
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 index FULLTEXT MySQL s'interroge avec la syntaxe MATCH ... AGAINST. IN NATURAL LANGUAGE MODE renvoie un score de pertinence ; IN BOOLEAN MODE donne un contrôle fin avec les opérateurs +/-/*. InnoDB prend en charge la recherche plein texte à 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 nécessite d'abord un Full-Text Catalog, puis un Full-Text Index sur la table (un KEY INDEX unique est obligatoire). CONTAINS prend en charge la recherche exacte/de proximité et les opérateurs logiques ; FREETEXT la recherche par le sens (linguistique). Le composant Full-Text Search doit être installé.
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 index text MongoDB fournit la recherche plein texte via l'opérateur $text ; une collection ne peut avoir qu'un seul index text. Le méta-champ textScore donne la pertinence. Pour une recherche plus avancée, on utilise Atlas Search ($search, basé sur 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 de base n'offre pas de recherche plein texte ; le module RediSearch (fourni avec Redis Stack) assure l'indexation avec FT.CREATE et la recherche avec FT.SEARCH. La racinisation, la recherche floue, le filtrage et le tri sont pris en charge. Sans le module installé, la fonctionnalité n'est pas disponible.
Elasticsearch
# Elasticsearch is natively a full-text search engine.
# match query (analyzed text search):
GET article/_search
{
"query": {
"match": { "content": "database performance" }
}
}Elasticsearch est fondamentalement un moteur de recherche plein texte basé sur Lucene ; les champs text sont analysés à l'indexation (tokenisation, racinisation). La requête match renvoie des résultats triés par score de pertinence (_score). Des analyseurs propres à une langue (par ex. 'english') peuvent être affectés.