Jak indeksować tabelę postgres według nazwy, gdy nazwa może być w dowolnym języku?

Mam dużą tabelę postgres zawierającą lokalizacje (sklepy, punkty orientacyjne itp.), Które użytkownik może wyszukiwać na różne sposoby. Gdy użytkownik chce wyszukać nazwę miejsca, system obecnie to robi (zakładając, że wyszukiwanie odbywa się w kawiarni):

lower(location_name) LIKE '%cafe%'

jako część zapytania. To jest bardzo nieefektywne. Zakaz tak. Ważne jest, że robię to szybciej. Próbowałem indeksować tabelę na

gin(to_tsvector('simple', location_name))

i wyszukiwanie z

(to_tsvector('simple',location_name) @@ to_tsquery('simple','cafe'))

który działa pięknie i skraca czas wyszukiwania o kilka rzędów wielkości.

Jednak nazwy lokalizacji mogą być w dowolnym języku, w tym w językach takich jak chiński, które nie są rozdzielone białymi znakami. Ten nowy system nie może znaleźć żadnych chińskich lokalizacji, chyba że szukam dokładnej nazwy, podczas gdy stary system może znaleźć dopasowania do częściowych nazw tylko w porządku.

Tak więc moje pytanie brzmi: czy mogę sprawić, by działało to dla wszystkich języków naraz, czy jestem na złej ścieżce?

questionAnswers(3)

yourAnswerToTheQuestion