sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Hitta meningar närmast en given mening

Fulltextsökning (FTS)

Du kan använda plainto_tsquery() till (per dokumentation ) ...

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

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

Använd det som:

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

Men det är fortfarande ganska strikt och ger bara mycket begränsad tolerans för likhet.

Trigramlikhet

Kan vara bättre lämpad att söka efter likhet , till och med övervinna stavfel till viss del.

Installera tilläggsmodulen pg_trgm , skapa ett GiST-index och använd likhetsoperatorn % i en närmaste grannesökning :

I grund och botten med ett trigram GiST-index på 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;

Mer:

Kombinera båda

Du kan till och med kombinera FTS- och trigramlikhet:



  1. Hur skriver man en säker SELECT-fråga som har ett variabelt antal användarangivna värden med mysqli?

  2. SQL uppdatera en beräknad kolumn

  3. Hur man delar upp kommaseparerad text i MySQL lagrad procedur

  4. Hur rengör eller ändrar storlek på ibtmp1-filen i MySQL?