Full-Text-Search Dictionary that Unaccent case-insensitive
FTS is naturally case-insensitive by default,
Converting tokens into lexemes. A lexeme is a string, just like a token, but it has been normalized so that different forms of the same word are made alike. For example, normalization almost always includes folding upper-case letters to lower-case, and often involves removal of suffixes (such as s or es in English).
And you can define your own dictionary using unaccent,
CREATE EXTENSION unaccent; CREATE TEXT SEARCH CONFIGURATION mydict ( COPY = simple ); ALTER TEXT SEARCH CONFIGURATION mydict ALTER MAPPING FOR hword, hword_part, word WITH unaccent, simple;
Which you can then index with a functional index,
-- Just some sample data... CREATE TABLE myTable ( myCol ) AS VALUES ('fóó bar baz'),('qux quz'); -- No index required, but feel free to create one CREATE INDEX ON myTable USING GIST (to_tsvector('mydict', myCol));
You can now query it very simply
SELECT * FROM myTable WHERE to_tsvector('mydict', myCol) @@ 'foo & bar' mycol ------------- fóó bar baz (1 row)
See also