Wie indiziere ich eine Postgres-Tabelle nach Namen, wenn der Name in einer beliebigen Sprache sein kann?

Ich habe eine große Postgres-Tabelle mit Orten (Läden, Sehenswürdigkeiten usw.), die der Benutzer auf verschiedene Arten durchsuchen kann. Wenn der Benutzer nach dem Namen eines Ortes suchen möchte, führt das System derzeit Folgendes aus (vorausgesetzt, die Suche erfolgt im Café):

lower(location_name) LIKE '%cafe%'

als Teil der Abfrage. Das ist äußerst ineffizient. Verboten so. Es ist wichtig, dass ich das schneller mache. Ich habe versucht, die Tabelle zu indizieren

gin(to_tsvector('simple', location_name))

und suchen mit

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

Das funktioniert wunderbar und verkürzt die Suchzeit um ein paar Größenordnungen.

Die Ortsnamen können jedoch in einer beliebigen Sprache sein, einschließlich Sprachen wie Chinesisch, die nicht durch Leerzeichen getrennt sind. Dieses neue System kann keine chinesischen Standorte finden, es sei denn, ich suche nach dem genauen Namen, während das alte System Übereinstimmungen mit unvollständigen Namen finden kann.

Meine Frage lautet also: Kann ich dies für alle Sprachen gleichzeitig zum Laufen bringen oder bin ich auf dem falschen Weg?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage