sql >> Databáze >  >> RDS >> PostgreSQL

Funguje operátor vyhledávání frází <-> s dokumenty JSONB nebo pouze s relačními tabulkami?

Funkce vyhledávání frází je integrována do dat textového vyhledávání typ tsquery . operátor textového vyhledávání @@ váš displej zabírá tsvector vlevo a tsquery doprava. A tsvector lze sestavit z libovolného typu znaků i z dokumentu JSON.

Související:

Svůj json můžete převést nebo jsonb dokument do vektoru textového vyhledávání s jedním z vyhrazených funkce :

to_tsvector()
json(b)_to_tsvector()

Upozorňujeme, že tyto zahrnují pouze hodnoty z dokumentu JSON, nikoli z klíčů . Obvykle to je to, co chcete. Základní příklad:

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

Ukázka shody prefixů v horní části vyhledávání frází. Viz:

Alternativně , můžete jednoduše vytvořit tsvector z text reprezentaci vašeho dokumentu JSON tak, aby zahrnoval také názvy klíčů:

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

Vytváří větší tsvector , samozřejmě.

Oba lze indexovat (což je hlavní bod textového vyhledávání). Pouze indexy jsou vázány na relační tabulky. (A můžete indexovat výraz !)
Samotný výraz lze použít na libovolnou hodnotu, není vázán na tabulky, jak se zdá naznačovat.




  1. nelze provádět dotazy RDS na heroku

  2. MySQL:Průměrný interval mezi záznamy

  3. Mysql Uložená procedura s java String Array

  4. Nejednoznačný dotaz na sloupec