Seu caso simples pode ser resolvido com uma simples consulta usando o
ANY
construir e ~*
:SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
é o operador de correspondência de expressão regular que não diferencia maiúsculas de minúsculas. Eu uso isso em vez de ILIKE
para que possamos usar palavras originais em sua string sem a necessidade de preencher %
para ILIKE
. O resultado é o mesmo - exceto para palavras que contêm caracteres especiais:%_\
para ILIKE
e !$()*+.:<=>?[\]^{|}-
para padrões de expressão regular. Você pode precisar escapar caracteres especiais de qualquer maneira para evitar surpresas. Aqui está uma função para expressões regulares:- Função Escape para expressão regular ou padrões LIKE
Mas tenho dúvidas incômodas de que será tudo o que você precisa. Veja meu comentário. Suspeito que você precise da Pesquisa de Texto Completo com um dicionário correspondente para sua linguagem natural para fornecer um radical de palavras útil ...
Relacionado:
- IN vs operador ANY no PostgreSQL
- Variações de desempenho de consulta PostgreSQL LIKE
- Correspondência de padrões com LIKE, SIMILAR TO ou expressões regulares no PostgreSQL