2017-04-13 10 views
-1

작은 데이터 세트 (~ 1000 행)가 있습니다. 각 행에는 사용자 이름, 이름 및 성이 있습니다. pg_trgm을 사용하여이 세 필드에서 퍼지 검색을 수행하고 세 필드를 두 필드 사이에 공백으로 연결할 수 있습니까? 또는 트라이 그램 또는 다른 방법을 사용하여이 사용자 집합을 검색하는 더 좋은 방법이 있습니까?포스트그레스 이름 검색

답변

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 

또는

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

왜 username'와'first_name''사이에 두 개의 공백이 있지만, first_name'와'last_name''사이에 하나? – Shien

+0

@Shien 그냥 오타 –

+0

더 중요한 것은 사용자가 이름과 사용자 이름을 공백으로 구분하여 입력하면 어떻게 될까요? – Shien