sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL:Find sætninger tættest på en given sætning

Fuld tekstsøgning (FTS)

Du kan bruge plainto_tsquery() til (pr. dokumentation ) ...

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

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

Brug det som:

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

Men det er stadig ret strengt og giver kun meget begrænset tolerance for lighed.

Trigram-lighed

Måske bedre egnet til at søge efter lighed , selv overvinde stavefejl til en vis grad.

Installer det ekstra modul pg_trgm , opret et GiST-indeks og brug lighedsoperatoren % i en nærmeste nabosøgning :

Grundlæggende med et trigram GiST-indeks 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;

Mere:

Kombiner begge

Du kan endda kombinere FTS og trigram-lighed:



  1. Database muligheder/pakker brugsrapportering

  2. Opdater flere rækker med flere 'where'-sætninger for hver enkelt række

  3. Henter antallet af rækker med en bestemt værdi efter filtrering af forespørgsel gennem datovælger

  4. Hvordan ignorerer man en parameter i en forberedt mysqli-forespørgsel i PHP?