0Pricing
SQL Academy · Lekcja

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 pozycje
  • tsquery — 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');    -- TRUE

Indeksowanie 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

  1. Konkatenacja: || i CONCAT
  2. UPPER, LOWER, SUBSTRING, REPLACE
  3. TRIM, LPAD, RPAD
  4. Wprowadzenie do wyszukiwania pełnotekstowego (tsvector, to_tsquery)
← Powrót do SQL Academy