sql >> Database >  >> RDS >> PostgreSQL

Levenshtein-functie gebruiken op elk element in een tsvector?

Overweeg de extensie pg_trgm in plaats van levenshtein() . Het is orden van grootte sneller als het wordt ondersteund door een GiST-index ter ondersteuning van de KNN-functie in PostgreSQL 9.1 of hoger .

Installeer de extensie eenmaal per database:

CREATE EXTENSION pg_trgm;

En gebruik de <-> of % operator . Verschillende gerelateerde antwoorden zijn hier op SO geplaatst, zoek naar pg_tgrm [PostgreSQL] ...

Wild geschoten op wat je misschien wilt:

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;

Retourneren:

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



  1. datum verschil, inclusief tijd

  2. Wat is een bladwijzer opzoeken in SQL Server?

  3. SQL NVARCHAR- en VARCHAR-limieten

  4. Maak een genest json-object met behulp van php mysql