¿Cómo puedo usar una búsqueda de texto completo en una columna jsonb con Postgres?

Respuestas:

15

PostgreSQL 10+

PostgreSQL 10 presenta la búsqueda de texto completo en JSONB

CREATE INDEX ON table
   USING gin ( to_tsvector('english',jsondata) );

La nueva indexación de FTS en JSON funciona con la búsqueda de frases y omite tanto el marcado como las teclas de JSON.

Evan Carroll
fuente
3

Puede, aunque si eso es práctico no está tan claro:

CREATE TABLE t
(
    id SERIAL PRIMARY KEY,
    the_data jsonb
) ;

CREATE INDEX idx_t_the_data_full_text 
    ON t 
    USING gist ( (to_tsvector('English', the_data::text))) ;

Y luego consultarlo con:

SELECT
    the_data
FROM
    t
WHERE
    to_tsvector('English', the_data::text) @@ plainto_tsquery('English', 'Action') ;

Tenga en cuenta que esto también encontrará todas sus claves de objeto , no solo los valores . Y estarás limitado a cuánto texto

dbfiddle aquí

joanolo
fuente