PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:Znajdź zdania najbliższe danemu zdaniu

Wyszukiwanie pełnotekstowe (FTS)

Możesz użyć plainto_tsquery() do (zgodnie z dokumentacją ) ...

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

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

Użyj go jak:

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

Ale to nadal jest dość surowe i zapewnia jedynie bardzo ograniczoną tolerancję na podobieństwo.

Podobieństwo trygramów

Może lepiej nadawać się do wyszukiwania podobieństwa , nawet w pewnym stopniu pokonuj literówki.

Zainstaluj dodatkowy moduł pg_trgm , utwórz indeks GiST i użyj operatora podobieństwa % w wyszukiwaniu najbliższego sąsiada :

Zasadniczo z trygramowym indeksem GiST w 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;

Więcej:

Połącz oba

Możesz nawet połączyć FTS i podobieństwo trygramów:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj PostgreSQL z 9.6 do 10.0 na Ubuntu 16.10

  2. Jak używać identyfikatorów UUID w SQLAlchemy?

  3. funkcja agregująca grupuj według daty w postgresql

  4. (psycopg2.DataError) nieprawidłowa składnia wejściowa dla liczby całkowitej:importowanie z pliku csv?

  5. Usunąć nazwany wolumin za pomocą docker-compose?