sql >> Databasteknik >  >> RDS >> PostgreSQL

Använder du Levenshtein-funktionen på varje element i en tsvektor?

Tänk på tillägget pg_trgm istället för levenshtein() . Det är snabbare i storleksordningar när det backas upp med ett GiST-index för att stödja KNN-funktion i PostgreSQL 9.1 eller senare .

Installera tillägget en gång per databas:

CREATE EXTENSION pg_trgm;

Och använd <-> eller % operatör . Flera relaterade svar har postats här på SO, sök efter pg_tgrm [PostgreSQL] ...

Vild skott på vad du kanske vill:

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;

Returnerar:

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



  1. Rails ActiveRecord hanterar en id-kolumn som inte är primärnyckeln

  2. många-till-många-relation i doktrin

  3. Membership.Provider för mysql i asp.net-utgåva

  4. PyMySQL-variabler i frågor