O recurso de pesquisa de frase está integrado aos dados de pesquisa de texto tipo
tsquery
. O operador de pesquisa de texto @@
você exibe leva um tsvector
à esquerda e um tsquery
Para a direita. E um tsvector
pode ser construído a partir de qualquer tipo de caractere, bem como de um documento JSON. Relacionado:
Você pode converter seu
json
ou jsonb
documento para um vetor de pesquisa de texto com um dos dedicados funções
:to_tsvector()
json(b)_to_tsvector()
Observe que eles incluem apenas valores do documento JSON, não chaves . Normalmente, é isso que você quer. Exemplo básico:
SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
@@ to_tsquery('jump <-> quick:*');
Demonstrando a correspondência de prefixo em cima da pesquisa de frase enquanto estiver nisso. Ver:
Alternativamente , você pode simplesmente criar o
tsvector
do text
representação do seu documento JSON para incluir também nomes de chave:SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
@@ to_tsquery('foo <-> fight:*');
Produz um
tsvector
maior , obviamente. Ambos podem ser indexados (que é o ponto principal da pesquisa de texto). Apenas índices são vinculados a tabelas relacionais. (E você pode indexar a expressão !)
A expressão em si pode ser aplicada a qualquer valor, não vinculada a tabelas como você parece sugerir.