PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използване на функцията на Levenshtein за всеки елемент в tsvector?

Помислете за разширението pg_trgm вместо levenshtein() . Той е по-бърз с порядъци, когато е подкрепен с GiST индекс, за да поддържа KNN функция в PostgreSQL 9.1 или по-нова версия .

Инсталирайте разширението веднъж за база данни:

CREATE EXTENSION pg_trgm;

И използвайте <-> или % оператор . Няколко свързани отговора са публикувани тук в SO, потърсете pg_tgrm [PostgreSQL] ...

Див изстрел към това, което може да искате:

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;

Връща:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА:кешираният план не трябва да променя типа резултат при смесване на DDL с SELECT чрез JDBC

  2. операторът не съществува:uuid =bytea Java с Postgres

  3. Tsrange - Изчисляване на разликата между два диапазона

  4. IntegrityError:нарушение на външния ключ при изтриване

  5. Как да направя актуализация + присъединяване в PostgreSQL?