PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'opérateur de recherche de phrase <-> fonctionne-t-il avec les documents JSONB ou uniquement avec les tables relationnelles ?

La capacité de recherche de phrases est intégrée dans les données recherche textuelle tapez tsquery . L'opérateur de recherche de texte @@ vous affichez prend un tsvector à gauche et un tsquery À droite. Et un tsvector peut être construit à partir de n'importe quel type de caractère ainsi qu'à partir d'un document JSON.

Connexe :

Vous pouvez convertir votre json ou jsonb document vers un vecteur de recherche de texte avec l'un des dédié fonctions :

to_tsvector()
json(b)_to_tsvector()

Notez que ceux-ci n'incluent que des valeurs du document JSON, pas des clés . En règle générale, c'est ce que vous voulez.Exemple de base :

SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
    @@ to_tsquery('jump <-> quick:*');

Démonstration de la correspondance de préfixe en plus de la recherche de phrases tout en y étant. Voir :

Alternativement , vous pouvez simplement créer le tsvector à partir du text représentation de votre document JSON pour inclure également les noms de clé :

SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
    @@ to_tsquery('foo <-> fight:*');

Produit un plus grand tsvector , évidemment.

Les deux peuvent être indexés (ce qui est le point principal de la recherche de texte). Seuls les index sont liés aux tables relationnelles. (Et vous pouvez indexer l'expression !)
L'expression elle-même peut être appliquée à n'importe quelle valeur, non liée à des tables comme vous semblez le suggérer.