sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL fulltextsökning och trigramförvirring

De tjänar väldigt olika syften.

  • Fulltextsökning används för att returnera dokument som matchar en sökfråga med härstammade ord.
  • Trigram ger dig en metod för att jämföra två strängar och avgöra hur lika de ser ut.

Tänk på följande exempel:

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

Ovanstående returnerar true eftersom 'cat' är ganska lik 'cats' (som dikteras av pg_trgm-gränsen).

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

Ovanstående returnerar false eftersom % söker på liknande sätt mellan de två hela strängarna, letar inte efter ordet cats inom strängen.

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

Detta returnerar true eftersom tsvector omvandlade strängen till en lista med stammade ord och ignorerade ett gäng vanliga ord (stoppord - som 'is' &'a')... sökte sedan efter stamversionen av cats .

Det låter som att du vill använda trigram för att autokorrigera din ts_query men det är inte riktigt möjligt (inte på något effektivt sätt i alla fall). De vet inte riktigt ett ord är felstavat, hur likt det kan vara ett annat ord. De kunde användas för att söka i en tabell med ord för att försöka hitta liknande ord, vilket gör att du kan implementera en funktion av typen "menade du...", men detta ord kräver att du har en separat tabell som innehåller alla ord som används i din search fältet.

Om du har några ofta felstavade ord/fraser som du vill att textindexet ska matcha, kanske du vill titta på Synonym Dictionaries




  1. Ändra decimalavgränsare i MySQL

  2. Det går inte att installera pg gem på Mountain Lion

  3. Markörbaserade poster i PostgreSQL

  4. Hur matar man ut oracle sql-resultat till en fil i Windows?