Din simple sag kan løses med en simpel forespørgsel ved hjælp af ANY
konstruktion og ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
er den store og små bogstaver ufølsomme regulære udtryk matchoperator. Jeg bruger det i stedet for ILIKE
så vi kan bruge originale ord i din streng uden at skulle udfylde %
for ILIKE
. Resultatet er det samme - bortset fra ord, der indeholder specialtegn:%_\
for ILIKE
og !$()*+.:<=>?[\]^{|}-
for regulære udtryksmønstre. Du skal muligvis undslippe specialtegn på begge måder for at undgå overraskelser. Her er en funktion til regulære udtryk:
- Escape-funktion til regulære udtryk eller LIKE-mønstre
Men jeg har nagende tvivl om, at det vil være alt, hvad du behøver. Se min kommentar. Jeg formoder, at du har brug for fuld tekstsøgning med en matchende ordbog til dit naturlige sprog for at give nyttige ordstammer ...
Relateret:
- IN vs. ENHVER operatør i PostgreSQL
- PostgreSQL LIKE forespørgselsydeevnevariationer
- Mønstermatching med LIKE, SIMILAR TO eller regulære udtryk i PostgreSQL