Il tuo caso semplice può essere risolto con una semplice query utilizzando ANY
costruire e ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
è l'operatore di corrispondenza delle espressioni regolari senza distinzione tra maiuscole e minuscole. Lo uso invece di ILIKE
così possiamo usare le parole originali nella tua stringa senza la necessità di riempire %
per ILIKE
. Il risultato è lo stesso, fatta eccezione per le parole che contengono caratteri speciali:%_\
per ILIKE
e !$()*+.:<=>?[\]^{|}-
per i modelli di espressioni regolari. Potrebbe essere necessario sfuggire ai caratteri speciali in entrambi i modi per evitare sorprese. Ecco una funzione per le espressioni regolari:
- Funzione di escape per espressioni regolari o pattern LIKE
Ma ho dubbi assillanti che sarà tutto ciò di cui hai bisogno. Vedi il mio commento. Sospetto che tu abbia bisogno della ricerca di testo completo con un dizionario corrispondente alla tua lingua naturale per fornire un'utile derivazione delle parole ...
Correlati:
- IN vs ANY operatore in PostgreSQL
- Variazioni delle prestazioni delle query LIKE di PostgreSQL
- Corrispondenza del modello con LIKE, SIMILAR TO o espressioni regolari in PostgreSQL