sql >> Database teknologi >  >> RDS >> PostgreSQL

Bruger du Levenshtein-funktionen på hvert element i en tsvector?

Overvej udvidelsen pg_trgm i stedet for levenshtein() . Den er hurtigere i størrelsesordener, når den understøttes af et GiST-indeks for at understøtte KNN-funktion i PostgreSQL 9.1 eller nyere .

Installer udvidelsen én gang pr. database:

CREATE EXTENSION pg_trgm;
 

Og brug <-> eller % operatør . Flere relaterede svar er blevet postet her på SO, søg efter pg_tgrm [PostgreSQL] ...

Vilde skud på, hvad du måtte ønske:

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;
 

Returnerer:

val | term | trg_dist | lev_dist -----+------+----------+---------- cat | brat | 0.875 | 2 fat | brat | 0.875 | 2 rat | brat | 0.714286 | 1


  1. MySQL INSERT hvis den ikke eksisterer (bruger ikke primærnøgle)

  2. Golang RESTful API-belastningstest forårsager for mange databaseforbindelser

  3. Installation af MySQL i Docker mislykkes med fejlmeddelelse Kan ikke oprette forbindelse til lokal MySQL-server via socket

  4. MySQL:Vis med underforespørgsel i FROM-klausulens begrænsning