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

PostgreSQL:Намерете изречения, най-близки до дадено изречение

Търсене в пълен текст (FTS)

Можете да използвате plainto_tsquery() до (по документация ) ...

SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')

 plainto_tsquery
------------------
 'sentenc' & 'irrelev' & 'word' & 'punctuat'

Използвайте го като:

SELECT *
FROM   tbl
WHERE  to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');

Но това все още е доста строго и предоставя само много ограничена толерантност към сходството.

Подобие на триграма

Може да е по-подходящо за търсене на сходство , дори да преодолее до известна степен правописните грешки.

Инсталирайте допълнителния модул pg_trgm , създайте GiST индекс и използвайте оператора за подобие % в търсене на най-близък съсед :

По принцип с триграма GiST индекс на sentence :

-- SELECT set_limit(0.3);  -- adjust tolerance if needed

SELECT *
FROM   tbl
WHERE  sentence % 'My new sentence'
ORDER  BY sentence <-> 'My new sentence'
LIMIT  10;

Още:

Комбинирайте и двете

Можете дори да комбинирате сходство на FTS и триграма:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е новото в PgBouncer 1.6

  2. Детерминиран ред на сортиране за прозоречни функции

  3. Функция Postgres ratio_to_report

  4. Postgresql индекс на xpath израз не дава ускорение

  5. Автоматично увеличаване на колоната на таблицата