Funktionen för frassökning är integrerad i textsökningsdata typ tsquery
. textsökoperatorn @@
du visar tar en tsvector
till vänster och en tsquery
till höger. Och en tsvector
kan byggas från vilken teckentyp som helst och från ett JSON-dokument.
Relaterat:
Du kan konvertera din json
eller jsonb
dokument till en textsökningsvektor med en av de dedikerade funktioner
:
to_tsvector()
json(b)_to_tsvector()
Observera att dessa endast inkluderar värden från JSON-dokumentet, inte nycklar . Vanligtvis är det vad du vill ha. Grundläggande exempel:
SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
@@ to_tsquery('jump <-> quick:*');
Demonstrerar prefixmatchning ovanpå frassökning medan du håller på. Se:
Alternativt , kan du helt enkelt skapa tsvector
från text
representation av ditt JSON-dokument för att även inkludera nyckelnamn:
SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
@@ to_tsquery('foo <-> fight:*');
Producerar en större tsvector
, uppenbarligen.
Båda kan indexeras (vilket är huvudpunkten med textsökning). Endast index är bundna till relationstabeller. (Och du kan indexera uttrycket
!)
Själva uttrycket kan appliceras på vilket värde som helst, inte bundet till tabeller som du verkar antyda.