Como posso usar uma pesquisa de texto completo em uma coluna jsonb com o Postgres?

Respostas:

15

PostgreSQL 10+

O PostgreSQL 10 introduz a pesquisa de texto completo no JSONB

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

A nova indexação do FTS no JSON funciona com a pesquisa de frases e ignora a marcação e as chaves JSON.

Evan Carroll
fonte
3

Você pode, embora isso seja prático, não seja tão 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))) ;

E, em seguida, consulte-o com:

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

Observe que isso também encontrará todas as suas chaves de objeto , não apenas os valores . E você ficará limitado à quantidade de texto

dbfiddle aqui

joanolo
fonte