Jak korzystać z wyszukiwania pełnotekstowego w kolumnie jsonb w Postgres?

Odpowiedzi:

15

PostgreSQL 10+

PostgreSQL 10 wprowadza wyszukiwanie pełnotekstowe w JSONB

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

Nowe indeksowanie FTS w JSON działa z wyszukiwaniem fraz i pomija zarówno znaczniki JSON, jak i klucze.

Evan Carroll
źródło
3

Możesz, choć nie jest to takie jasne:

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

Następnie przeprowadź zapytanie za pomocą:

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

Zauważ, że znajdzie to również wszystkie klucze obiektu , nie tylko wartości . I będziesz ograniczony do ilości tekstu

dbfiddle tutaj

joanolo
źródło