Volltextsuche
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 (früher interMedia) bietet sprachbewusste Volltextsuche über einen CONTEXT-Index. Der Operator CONTAINS unterstützt Suchoperatoren wie AND/OR/NEAR. Der Index wird mit CTX_DDL.SYNC_INDEX oder automatischem SYNC gepflegt.
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;Die eingebaute Volltextsuche von PostgreSQL gleicht tsvector (Dokument) mit tsquery (Abfrage) über den Operator @@ ab. Ein GIN-Index beschleunigt Suchen in großen Texten. Die Sprachkonfiguration ('english') übernimmt Stemming und Stoppwortbehandlung.
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);Ein FULLTEXT-Index in MySQL wird mit der Syntax MATCH ... AGAINST abgefragt. IN NATURAL LANGUAGE MODE liefert einen Relevanzwert; IN BOOLEAN MODE erlaubt mit den Operatoren +/-/* eine feine Steuerung. InnoDB unterstützt Volltextsuche ab 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"');Die Volltextsuche von SQL Server benötigt zuerst einen Full-Text Catalog, dann einen Full-Text Index auf der Tabelle (ein eindeutiger KEY INDEX ist Pflicht). CONTAINS unterstützt exakte Suche/Umkreissuche und logische Operatoren; FREETEXT unterstützt bedeutungsbasierte (linguistische) Suche. Die Komponente Full-Text Search muss installiert sein.
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" } })Ein Text-Index in MongoDB bietet Volltextsuche über den Operator $text; eine Collection kann nur einen Text-Index haben. Das Metafeld textScore liefert die Relevanz. Für fortgeschrittenere Suche wird Atlas Search ($search, Lucene-basiert) genutzt.
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"Core Redis bietet keine Volltextsuche; das Modul RediSearch (in Redis Stack enthalten) ermöglicht Indexierung mit FT.CREATE und Suche mit FT.SEARCH. Stemming, unscharfe Suche, Filterung und Sortierung werden unterstützt. Ohne installiertes Modul ist die Funktion nicht verfügbar.
Elasticsearch
# Elasticsearch is natively a full-text search engine.
# match query (analyzed text search):
GET article/_search
{
"query": {
"match": { "content": "database performance" }
}
}Elasticsearch ist im Kern eine auf Lucene aufbauende Volltextsuchmaschine; text-Felder werden beim Indexieren analysiert (Tokenisierung, Stemming). Die match-Abfrage liefert nach Relevanzwert (_score) sortierte Ergebnisse. Sprachspezifische Analyzer (z. B. 'english') lassen sich zuweisen.