sql >> Databáze >  >> RDS >> PostgreSQL

Použití Levenshteinovy ​​funkce na každý prvek v tsvektoru?

Zvažte rozšíření pg_trgm místo levenshtein() . Je řádově rychlejší, když je podpořen indexem GiST pro podporu Funkce KNN v PostgreSQL 9.1 nebo novější .

Nainstalujte rozšíření jednou na databázi:

CREATE EXTENSION pg_trgm;

A použijte <-> nebo % operátor . Několik souvisejících odpovědí bylo zveřejněno zde na SO, vyhledejte pg_tgrm [PostgreSQL] ...

Divoká střela na to, co byste mohli chtít:

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;

Vrátí:

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



  1. aktualizujte data xml pomocí dotazu sql na postgresql

  2. Jak exportovat všechna data z tabulky do vložitelného formátu SQL?

  3. Jak se připojit k databázi Oracle pomocí cx_Oracle s názvem služby a přihlášením?

  4. Převést „datetimeoffset“ na „smalldatetime“ v SQL Server (příklady T-SQL)