Ditt enkla fall kan lösas med en enkel fråga med ANY
konstruktion och ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
är den skiftlägesokänsliga matchningsoperatorn för reguljära uttryck. Jag använder det istället för ILIKE
så vi kan använda originalord i din sträng utan att behöva fylla ut %
för ILIKE
. Resultatet är detsamma - förutom ord som innehåller specialtecken:%_\
för ILIKE
och !$()*+.:<=>?[\]^{|}-
för reguljära uttrycksmönster. Du kan behöva undkomma specialtecken åt båda hållen för att undvika överraskningar. Här är en funktion för reguljära uttryck:
- Escape-funktion för reguljära uttryck eller LIKE-mönster
Men jag tvivlar på att det är allt du behöver. Se min kommentar. Jag misstänker att du behöver fulltextsökning med en matchande ordbok för ditt naturliga språk för att ge användbar ordavledning ...
Relaterat:
- IN vs ALLA operatör i PostgreSQL
- PostgreSQL LIKE frågeprestandavariationer
- Mönstermatchning med LIKE, SIMILAR TO eller reguljära uttryck i PostgreSQL