sql >> Base de Datos >  >> RDS >> PostgreSQL

¿El operador de búsqueda de frases <-> funciona con documentos JSONB o solo con tablas relacionales?

La capacidad de búsqueda de frases está integrada en los búsqueda de texto datos escribir tsquery . El operador de búsqueda de texto @@ muestra toma un tsvector a la izquierda y un tsquery A la derecha. Y un tsvector se puede crear a partir de cualquier tipo de carácter, así como a partir de un documento JSON.

Relacionado:

Puedes convertir tu json o jsonb documento a un vector de búsqueda de texto con uno de los dedicado funciones :

to_tsvector()
json(b)_to_tsvector()

Tenga en cuenta que estos solo incluyen valores del documento JSON, no claves . Por lo general, eso es lo que desea. Ejemplo básico:

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

Demostración de coincidencia de prefijos además de la búsqueda de frases mientras lo hace. Ver:

Alternativamente , simplemente puede crear el tsvector del text representación de su documento JSON para incluir también nombres clave:

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

Produce un tsvector más grande , obviamente.

Ambos se pueden indexar (que es el punto principal de la búsqueda de texto). Solo los índices están vinculados a tablas relacionales. (Y puede indexar la expresión !)
La expresión en sí se puede aplicar a cualquier valor, sin vincularse a tablas como parece implicar.