sql >> Database teknologi >  >> RDS >> PostgreSQL

Virker sætningssøgeoperatoren <-> med JSONB-dokumenter eller kun relationelle tabeller?

Udtrykket søgefunktion er integreret i tekstsøgning data type tsquery . tekstsøgeoperatoren @@ din skærm tager en tsvector til venstre og en tsquery til højre. Og en tsvector kan bygges ud fra enhver tegntype såvel som fra et JSON-dokument.

Relateret:

Du kan konvertere din json eller jsonb dokument til en tekstsøgningsvektor med en af ​​de dedikerede funktioner :

to_tsvector()
json(b)_to_tsvector()

Bemærk, at disse kun inkluderer værdier fra JSON-dokumentet, ikke nøgler . Det er typisk, hvad du vil have. Grundlæggende eksempel:

SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
    @@ to_tsquery('jump <-> quick:*');

Demonstrerer præfiksmatching oven på sætningssøgning, mens du er i gang. Se:

Alternativt , kan du blot oprette tsvector fra text repræsentation af dit JSON-dokument til også at inkludere nøglenavne:

SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
    @@ to_tsquery('foo <-> fight:*');

Producerer en større tsvector , åbenbart.

Begge kan indekseres (hvilket er hovedpunktet i tekstsøgning). Kun indekser er bundet til relationelle tabeller. (Og du kan indeksere udtrykket !)
Selve udtrykket kan anvendes på enhver værdi, ikke bundet til tabeller, som du synes at antyde.




  1. Få resultater fra tabel-værdi Postgresql-funktion med JOOQ

  2. json_encode gør array til et objekt

  3. Sådan bruges STRCMP() til at sammenligne 2 strenge i MySQL

  4. Sådan installeres MySQL på Windows 10? – Din One Stop-løsning til at installere MySQL