sql >> Database >  >> RDS >> PostgreSQL

Werkt de zoekoperator voor woordgroepen <-> met JSONB-documenten of alleen relationele tabellen?

De zoekfunctie voor woordgroepen is geïntegreerd in de tekstzoekfunctie gegevens typ tsquery . De tekstzoekoperator @@ die je weergeeft, kost een tsvector naar links en een tsquery naar rechts. En een tsvector kan worden opgebouwd uit elk tekentype en uit een JSON-document.

Gerelateerd:

U kunt uw json . converteren of jsonb document naar een tekstzoekvector met een van de toegewijde functies :

to_tsvector()
json(b)_to_tsvector()

Let op:deze bevatten alleen waarden uit het JSON-document, niet sleutels . Normaal gesproken is dat wat u wilt.Basisvoorbeeld:

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

Demonstreren voorvoegselovereenkomst bovenop zin zoeken terwijl je bezig bent. Zie:

Alternatief , kunt u eenvoudig de tsvector . maken uit de text weergave van uw JSON-document om ook sleutelnamen op te nemen:

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

Produceert een grotere tsvector , uiteraard.

Beide kunnen worden geïndexeerd (wat het belangrijkste punt is bij het zoeken naar tekst). Alleen indexen zijn gebonden aan relationele tabellen. (En je kunt de uitdrukking indexeren !)
De uitdrukking zelf kan worden toegepast op elke waarde, niet gebonden aan tabellen zoals u lijkt te suggereren.




  1. waarde invoegen van html select-formulier in mysql-database

  2. MySQL invoegen in selecteren

  3. MySQL:records ingevoegd per uur, voor de afgelopen 24 uur

  4. Query's met MySQL-parameter