2017-04-13 1 views
-1

Ich habe einen winzigen Datensatz (~ 1000 Zeilen). Jede Zeile hat einen Benutzernamen, einen Vornamen und einen Nachnamen. Kann ich eine unscharfe Suche für diese drei Felder durchführen, indem ich pg_trgm verwende und die drei Felder zusammen mit zwei Leerzeichen zwischen den beiden Feldern verkette? Oder gibt es eine bessere Methode, um diese Benutzergruppe mit Trigrammen oder anderen Methoden zu durchsuchen?Postgres Namenssuche

Antwort

0
select format('%s %s %s', username, first_name, last_name) 
from t 
order by greatest (
    similarity(_name, username), 
    similarity(_name, first_name), 
    similarity(_name, last_name) 
) desc 
limit 10 

oder

select s 
from t, format('%s %s %s', username, first_name, last_name) s(s) 
order by word_similarity(_name, s) desc 
limit 10 
+0

Warum gibt es zwei Räume zwischen 'username' und' first_name', aber nur eine zwischen 'first_name' und' last_name'? – Shien

+0

@Shien Nur ein Tippfehler –

+0

Was noch wichtiger ist, was passiert, wenn der Benutzer sowohl den Vornamen als auch den Benutzernamen (getrennt durch ein Leerzeichen) eingibt? – Shien