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

PostgreSQL fuldtekstsøgning og trigramforvirring

De tjener meget forskellige formål.

  • Fuld tekstsøgning bruges til at returnere dokumenter, der matcher en søgeforespørgsel med stammeord.
  • Trigrammer giver dig en metode til at sammenligne to strenge og bestemme, hvor ens de ser ud.

Overvej følgende eksempler:

SELECT 'cat' % 'cats'; --true

Ovenstående returnerer sand, fordi 'cat' er ret lig 'cats' (som dikteret af pg_trgm-grænsen).

SELECT 'there is a cat with a dog' % 'cats'; --false

Ovenstående returnerer false fordi % leder efter på samme måde mellem de to hele strenge, og leder ikke efter ordet cats indenfor strengen.

SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true

Dette returnerer true fordi tsvector omdannede strengen til en liste med opstammede ord og ignorerede en masse almindelige ord (stopord - som 'er' &'a')... søgte derefter efter den stammede version af cats .

Det lyder som om du vil bruge trigrammer til at autokorrigere din ts_query men det er ikke rigtig muligt (ikke på nogen effektiv måde alligevel). De ved ikke rigtigt et ord er stavet forkert, hvor ligner det bare et andet ord. De kunne bruges til at søge i en tabel med ord for at prøve at finde lignende ord, hvilket giver dig mulighed for at implementere en "menede du..."-typefunktion, men dette ord kræver, at du vedligeholder en separat tabel, der indeholder alle de ord, der bruges i din search felt.

Hvis du har nogle almindeligt stavede ord/sætninger, som du vil have tekstindekset til at matche, kan du eventuelt se på Synonym Dictionaries




  1. Mysql rekursion?

  2. Forbedret støtte til genopbygning af parallelle statistikker

  3. Brug af Metadata Discovery Wizard

  4. Selvstudium til SQL joins