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

Как да създадете просто размито търсене само с PostgreSQL?

Postgres предоставя модул с няколко функции за сравнение на низове като soundex и metaphone. Но вие ще искате да използвате функцията за редактиране на разстоянието на левещайн.

Example:

test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)

2 е разстоянието за редактиране между двете думи. Когато приложите това спрямо няколко думи и сортирате според резултата от разстоянието за редактиране, ще имате вида размити съвпадения, които търсите.

Опитайте тази примерна заявка:(със вашите собствени имена на обекти и данни, разбира се)

SELECT * 
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10

Тази заявка казва:

Дайте ми първите 10 резултата от всички данни от some_table, където разстоянието за редактиране между стойността на кода и входа 'AB123-lHdfj' е по-малко от 3. Ще получите обратно всички редове, където стойността на кода е в рамките на 3 знака разлика до ' AB123-lHdfj'...

Забележка:ако получите грешка като:

function levenshtein(character varying, unknown) does not exist

Инсталирайте fuzzystrmatch разширение с помощта на:

test=# CREATE EXTENSION fuzzystrmatch;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съветни заключване или NOWAIT, за да избегнете чакането на заключени редове?

  2. LIKE заявка за елементи от плосък jsonb масив

  3. Шаблони и модификатори за числово форматиране в PostgreSQL

  4. PostgreSQL функция/запаметена процедура CURRENT_TIMESTAMP не се променя

  5. Грешка в PostgreSQL:Фатално:потребителското име на ролята не съществува