Junior — Middle
Jaki mechanizm przechowywania danych realizuje wyszukiwanie pełnotekstowe w bazie danych PostgreSQL?
sobes.tech AI
Odpowiedź od AI
W PostgreSQL do implementacji wyszukiwania pełnotekstowego używany jest mechanizm indeksów typu GiST (Generalized Search Tree) lub GIN (Generalized Inverted Index). Podstawą jest reprezentacja tekstu w formie tsvector — struktury, która dzieli tekst na leksemy (słowa), normalizuje je i przechowuje ich pozycje.
Podczas wyszukiwania używa się tsquery — zapytania, które jest porównywane z tsvector. Indeksy GIN są szczególnie wydajne dla szybkiego wyszukiwania w wielu słowach, ponieważ tworzą indeks odwrócony, umożliwiający szybkie znajdowanie dokumentów zawierających potrzebne leksemy.
Przykład tworzenia indeksu dla wyszukiwania pełnotekstowego:
CREATE INDEX idx_fts ON documents USING GIN(to_tsvector('russian', content));
Następnie można wykonywać zapytania:
SELECT * FROM documents WHERE to_tsvector('russian', content) @@ to_tsquery('russian', 'поиск & база');