it-swarm.com.de

Wie kann ich mit Postgres eine Volltextsuche in einer jsonb-Spalte verwenden?

Ich habe also eine jsonb Spalte, die Einträge wie diese enthält: https://Pastebin.com/LxJ8rKk4

Gibt es eine Möglichkeit, eine Volltextsuche für die gesamte jsonb-Spalte zu implementieren?

13
choco

PostgreSQL 10+

PostgreSQL 10 führt die Volltextsuche in JSONB ein

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

Die neue FTS-Indizierung in JSON funktioniert mit der Phrasensuche und überspringt sowohl das JSON-Markup als auch die Schlüssel.

15
Evan Carroll

Sie können, obwohl nicht so klar ist, ob das praktisch ist:

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))) ;

Und fragen Sie es dann ab mit:

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

Beachten Sie, dass dies auch alle Ihre Objektschlüssel findet, nicht nur die Werte . Und Sie können nur so viel Text verwenden

dbfiddle hier

3
joanolo