Xem xét phần mở rộng pg_trgm
thay vì levenshtein()
. Nó nhanh hơn theo thứ tự cường độ khi được hỗ trợ bằng chỉ mục GiST để hỗ trợ KNN trong PostgreSQL 9.1 trở lên
.
Cài đặt tiện ích mở rộng một lần cho mỗi cơ sở dữ liệu:
CREATE EXTENSION pg_trgm;
Và sử dụng <->
hoặc %
nhà điều hành
. Một số câu trả lời liên quan đã được đăng ở đây trên SO, hãy tìm kiếm pg_tgrm [PostgreSQL] ...
Bắn hoang dã những gì bạn có thể muốn:
WITH x AS (
SELECT unnest(string_to_array(trim(strip(
'fat:2,4 cat:3 rat:5A'::tsvector)::text, ''''), ''' ''')) AS val
) -- provide ts_vector, extract strings
, y AS( SELECT 'brat'::text AS term) -- provide term to match
SELECT val, term
,(val <-> term) AS trg_dist -- distance operator
,levenshtein(val, term) AS lev_dist
FROM x, y;
Lợi nhuận:
val | term | trg_dist | lev_dist
-----+------+----------+----------
cat | brat | 0.875 | 2
fat | brat | 0.875 | 2
rat | brat | 0.714286 | 1