Funkcja wyszukiwania fraz jest zintegrowana z wyszukiwaniem tekstowym danych pisać tsquery
. operator wyszukiwania tekstowego @@
wyświetlasz pobiera tsvector
po lewej stronie i tsquery
w prawo. I tsvector
można zbudować z dowolnego typu znaków, a także z dokumentu JSON.
Powiązane:
Możesz przekonwertować swój json
lub jsonb
dokument do wektora wyszukiwania tekstu z jednym z dedykowany funkcje
:
to_tsvector()
json(b)_to_tsvector()
Pamiętaj, że zawierają one tylko wartości z dokumentu JSON, a nie kluczy . Zazwyczaj tego właśnie chcesz.Przykład podstawowy:
SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
@@ to_tsquery('jump <-> quick:*');
Demonstracja dopasowania prefiksu na szczycie wyszukiwania fraz, będąc na nim. Zobacz:
Alternatywnie , możesz po prostu utworzyć tsvector
z text
reprezentacja twojego dokumentu JSON z uwzględnieniem nazw kluczy:
SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
@@ to_tsquery('foo <-> fight:*');
Tworzy większy tsvector
, oczywiście.
Oba mogą być indeksowane (co jest głównym punktem wyszukiwania tekstowego). Tylko indeksy są powiązane z tabelami relacyjnymi. (Możesz też indeksować wyrażenie
!)
Samo wyrażenie może być zastosowane do dowolnej wartości, niezwiązanej z tabelami, jak to sugerujesz.