GiST ( Eng. Generalized Search Tree , Generalized Search Tree) er en indeksstruktur, der er en generaliseret slags R-træ og giver standardmetoder til at navigere i træet og opdatere det (opdeling og sletning af noder). GiST er et balanceret (højde) træ, hvis endeknuder (blade) indeholder par (nøgle, rid), hvor nøgle er nøglen og rid er en pegepind til den tilsvarende indgang på datasiden. De interne noder indeholder (p, ptr) par, hvor p er et prædikat (brugt som opslagsnøgle), der kører på *alle* efterkommernoder, og ptr er en pegepind til en anden node i træet. Dette træ definerer de grundlæggende metoder SEARCH, INSERT, DELETE og en grænseflade til at skrive brugerdefinerede metoder, der kan styre driften af disse (grundlæggende) metoder.
SEARCH-metoden styres af Consistent-funktionen, som returnerer 'true', hvis noden opfylder prædikatet, INSERT-metoden styres af penalty-, picksplit- og unionsfunktionerne, som giver os mulighed for at estimere kompleksiteten af insert-operationen ind i noden , opdeler knudepunktet i tilfælde af overløb og genopbyg træet om nødvendigt, SLET-metoden finder et blad af træet , der indeholder nøglen, fjerner parret (nøgle, befri) og om nødvendigt, ved hjælp af unionsfunktionen, genopbygger forælderen noder [1] .
GiST er et direkte indeks, der bruges af PostgreSQL fuldtekstsøgning . Det betyder, at for hver tsvector, der beskriver alle tokens i dokumentet, oprettes en signatur, der beskriver, hvilke tokens der er inkluderet i denne tsvector. Funktionsprincippet ligner bitindeks, men der er forskelle.
Lad os demonstrere med et eksempel: lad tokenet w1 være forbundet med signaturen 001000, tokenet w2 - 000010. Så vil dokumentet, der kun indeholder tokens w1 og w2, blive forbundet med signaturen 001010 (001000 | 000010). I modsætning til bitindekser er kortlægningen af tokens til signaturer ikke enestående, det vil sige, at eksistensen af et token w3 med signaturen 001000 er mulig. Dette giver mulighed for betydelige besparelser på størrelsen af indekset, men kræver en sekundær kontrol for et fuldstændigt match mellem forespørgslen og dokument-tokens.
Det er også værd at bemærke, at hvis anmodningstokenet har en signatur, for eksempel 000001, så indeholder dokumentet med signaturen 001010 det bestemt ikke, på trods af tvetydigheden af tokenmapping.
Fordelen ved GiST er dens oprettelseshastighed og indeksstørrelse sammenlignet med GiN (3 gange), så det er at foretrække for dynamisk konstant opdaterede data. For statiske eller sjældent opdaterede data er et GiN-indeks at foretrække (det søger 3 gange hurtigere) [2] .