Sorry for not beeing clear. For example: I have a user Horváth. Now if i search the name by typing Horvath ( a instead of á) there is no result. To ignore the accent postgres can use the extension unaccent.
SELECT * FROM users WHERE unaccent(lastname) = unaccent(‘Horváth’)
Now i don´t know how to combine ilike with unaccent.
To be honest, this will probably result in a linear scan of the table. Therefore I’d add an indexed column, which contains the unaccented name while not using like and friends unless necessary.
Thanks. But i don´t get it where the problem lies. The raw postgres query is somehow simple. Besides from ilike i tried the following but get an error that there is no function unaccent:
For note, just unaccenting won’t find slight misspelling and similar phenomes and so forth. If you are using PostgreSQL (as stated above) then you really should use it’s language lookup system (tsvector’s and all). It is significantly more powerful, more useful, and will also be faster than using ILIKE.
Also, you really don’t want to accept user string when using ILIKE/LIKE as it is quite possible to craft some exponentially bad lookups via it that can bring your database to a crawl or death.
A quick no-index setup but significantly more useful and safe than ILIKE while returning much better results would be something like changing your example into: