Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)
Indeksuj dokumenty za pomocą tsvector, wykonuj zapytania w języku naturalnym przy użyciu to_tsquery i porządkuj wyniki według trafności za pomocą ts_rank.
Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery) to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Dlaczego wyszukiwanie pełnotekstowe?
LIKE/ILIKE wyszukuje podciągi. Wyszukiwanie pełnotekstowe (FTS) rozumie słowa: stemming, słowa pomijane, reguły językowe i istotność wyników. Jest wbudowane w PostgreSQL — nie wymaga rozszerzenia.
Dwa podstawowe typy
FTS opiera się na dwóch typach:
tsvector— sparsowany dokument: leksemy i pozycjetsquery— sparsowane zapytanie: leksemy i operatory logiczne
Łączy się je za pomocą operatora @@.
Parsowanie dokumentu
Przekształć surowy tekst w tsvector:
SELECT to_tsvector('english', 'The quick brown foxes jump over the lazy dogs');
-- 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
-- Stop words ('the', 'over') dropped; words stemmed (foxes → fox)Parsowanie zapytania
Tak samo przetwórz dane wyszukiwania:
SELECT to_tsquery('english', 'foxes & dogs');
-- 'fox' & 'dog'Dopasowywanie
Użyj @@, aby wykonać sprawdzenie:
SELECT to_tsvector('english', 'The lazy fox')
@@ to_tsquery('english', 'fox'); -- TRUEIndeksowanie tabeli dokumentów
Dodaj kolumnę tsvector i indeks GIN, aby przyspieszyć zapytania:
CREATE TABLE articles (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL
);
-- Either keep a generated tsvector column:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english',
coalesce(title,'') || ' ' || coalesce(body,'')
)
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);Wyszukiwanie
Dzięki indeksowi zapytania działają szybko:
SELECT id, title
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json')
ORDER BY id DESC;Operatory logiczne w zapytaniach
tsquery obsługuje & (AND), | (OR), ! (NOT) oraz grupowanie:
to_tsquery('english', '(cat | dog) & !rabbit');Wyszukiwanie fraz
Użyj <-> dla sąsiadujących słów:
to_tsquery('english', 'postgres <-> performance');
-- finds 'postgres performance', not 'postgres is great for performance'Przyjazne zapytania internetowe: websearch_to_tsquery
Akceptuj zapytania w stylu Google:
SELECT websearch_to_tsquery('english', 'postgres "json indexing" -mongo');Ranking wyników
Ustalaj ranking za pomocą ts_rank lub ts_rank_cd:
SELECT id, title,
ts_rank(search_doc, query) AS rank
FROM articles, to_tsquery('english', 'postgres & json') AS query
WHERE search_doc @@ query
ORDER BY rank DESC
LIMIT 20;Wyróżnianie
Wyświetl dopasowane fragmenty:
SELECT ts_headline('english', body,
to_tsquery('english', 'postgres & json'),
'StartSel=<mark>,StopSel=</mark>')
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json');Podsumowanie
FTS jest wbudowane w PostgreSQL.
tsvector+tsquery+@@- Indeks GIN zapewniający szybkość
- websearch_to_tsquery do obsługi danych wprowadzanych przez człowieka
- ts_rank do sortowania według istotności
Szybki test
Który operator porównuje tsvector z tsquery?
Często zadawane pytania
Czy lekcja „Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)” jest bezpłatna?
Tak — pełny tekst „Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)”?
Indeksuj dokumenty za pomocą tsvector, wykonuj zapytania w języku naturalnym przy użyciu to_tsquery i porządkuj wyniki według trafności za pomocą ts_rank. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Konkatenacja: || i CONCAT
- UPPER, LOWER, SUBSTRING, REPLACE
- TRIM, LPAD, RPAD
- Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)