La capacità di ricerca di frasi è integrata nei ricerca testuale dati digita tsquery
. L'operatore di ricerca di testo @@
visualizzato prende un tsvector
a sinistra e un tsquery
A destra. E un tsvector
può essere compilato da qualsiasi tipo di carattere e da un documento JSON.
Correlati:
Puoi convertire il tuo json
o jsonb
documento in un vettore di ricerca di testo con uno dei dedicati funzioni
:
to_tsvector()
json(b)_to_tsvector()
Tieni presente che questi includono solo valori dal documento JSON, non dalle chiavi . In genere, è quello che vuoi. Esempio di base:
SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
@@ to_tsquery('jump <-> quick:*');
Dimostrazione della corrispondenza del prefisso in cima alla ricerca di frasi mentre ci sei. Vedi:
In alternativa , puoi semplicemente creare il tsvector
dal text
rappresentazione del tuo documento JSON per includere anche i nomi delle chiavi:
SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
@@ to_tsquery('foo <-> fight:*');
Produce un tsvector
più grande , ovviamente.
Entrambi possono essere indicizzati (che è il punto principale della ricerca di testo). Solo gli indici sono associati alle tabelle relazionali. (E puoi indicizzare l'espressione
!)
L'espressione stessa può essere applicata a qualsiasi valore, non vincolata a tabelle come sembri implicare.