J'ai donc une colonne jsonb
qui contient des entrées comme celle-ci: https://Pastebin.com/LxJ8rKk4
Existe-t-il un moyen d'implémenter une recherche en texte intégral sur toute la colonne jsonb?
PostgreSQL 10 introduit la recherche en texte intégral sur JSONB
CREATE INDEX ON table
USING gin ( to_tsvector('english',jsondata) );
La nouvelle indexation FTS sur JSON fonctionne avec la recherche de phrases et ignore à la fois le balisage JSON et les clés.
Vous pouvez, bien que ce ne soit pas si clair:
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))) ;
Et puis interrogez-le avec:
SELECT
the_data
FROM
t
WHERE
to_tsvector('English', the_data::text) @@ plainto_tsquery('English', 'Action') ;
Notez que cela trouvera également toutes les clés de votre objet , pas seulement les valeurs . Et vous serez limité à la quantité de texte
dbfiddle ici