PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'operatore di ricerca della frase <-> funziona con documenti JSONB o solo tabelle relazionali?

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.