Su caso simple se puede resolver con una consulta simple usando ANY
construir y ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
es el operador de coincidencia de expresiones regulares que no distingue entre mayúsculas y minúsculas. Lo uso en lugar de ILIKE
para que podamos usar palabras originales en su cadena sin la necesidad de rellenar %
para ILIKE
. El resultado es el mismo, excepto por las palabras que contienen caracteres especiales:%_\
para ILIKE
y !$()*+.:<=>?[\]^{|}-
para patrones de expresiones regulares. Es posible que deba escapar de los caracteres especiales de cualquier manera para evitar sorpresas. Aquí hay una función para expresiones regulares:
- Función de escape para expresiones regulares o patrones LIKE
Pero tengo dudas persistentes de que será todo lo que necesitas. Ver mi comentario. Sospecho que necesita la búsqueda de texto completo con un diccionario coincidente para su idioma natural para proporcionar palabras útiles...
Relacionado:
- IN vs CUALQUIER operador en PostgreSQL
- Variaciones de rendimiento de consultas LIKE de PostgreSQL
- Coincidencia de patrones con LIKE, SIMILAR TO o expresiones regulares en PostgreSQL