De zoekfunctie voor woordgroepen is geïntegreerd in de tekstzoekfunctie gegevens typ tsquery
. De tekstzoekoperator @@
die je weergeeft, kost een tsvector
naar links en een tsquery
naar rechts. En een tsvector
kan worden opgebouwd uit elk tekentype en uit een JSON-document.
Gerelateerd:
U kunt uw json
. converteren of jsonb
document naar een tekstzoekvector met een van de toegewijde functies
:
to_tsvector()
json(b)_to_tsvector()
Let op:deze bevatten alleen waarden uit het JSON-document, niet sleutels . Normaal gesproken is dat wat u wilt.Basisvoorbeeld:
SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
@@ to_tsquery('jump <-> quick:*');
Demonstreren voorvoegselovereenkomst bovenop zin zoeken terwijl je bezig bent. Zie:
Alternatief , kunt u eenvoudig de tsvector
. maken uit de text
weergave van uw JSON-document om ook sleutelnamen op te nemen:
SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
@@ to_tsquery('foo <-> fight:*');
Produceert een grotere tsvector
, uiteraard.
Beide kunnen worden geïndexeerd (wat het belangrijkste punt is bij het zoeken naar tekst). Alleen indexen zijn gebonden aan relationele tabellen. (En je kunt de uitdrukking indexeren
!)
De uitdrukking zelf kan worden toegepast op elke waarde, niet gebonden aan tabellen zoals u lijkt te suggereren.