DROP TRIGGER IF EXISTS fulltext_update ON dokument;
DROP TRIGGER IF EXISTS fulltext_autor_update ON dokument;

DROP INDEX IF EXISTS fulltext_index;
DROP INDEX IF EXISTS fulltext_autor_index;

ALTER TABLE dokument DROP COLUMN IF EXISTS fulltext;
ALTER TABLE dokument DROP COLUMN IF EXISTS fulltext_autor;

/******************************************************************************
 * Erzeuge ein Volltext-Attribut samt Volltext-Index
 * für die Text-Attribute 'autor', 'titel' und 'inhalt'.
 ******************************************************************************/

/* Erzeuge das Volltext-Attribut */
ALTER TABLE dokument ADD COLUMN fulltext TSVECTOR;

/* Füge die Volltexte ein. */
UPDATE dokument
SET fulltext =
    to_tsvector('german',           autor
                          || ' ' || titel
                          || ' ' || coalesce(inhalt, '')
               )
;

/* Erzeuge den zugehörigen Index */
CREATE INDEX fulltext_index ON dokument USING gin(fulltext);

/* Passe den Index bei jedem UPDATE und jedem INSERT an. */
CREATE TRIGGER fulltext_update BEFORE INSERT OR UPDATE
ON dokument
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(fulltext, 'pg_catalog.german', autor, titel, inhalt);
;


/******************************************************************************
 * Erzeuge ein Volltext-Attribut samt Volltext-Index
 * für das Text-Attribut 'autor'.
 ******************************************************************************/

/* Erzeuge das Volltext-Attribut */
ALTER TABLE dokument ADD COLUMN fulltext_autor TSVECTOR;

/* Füge die Volltexte ein. */
UPDATE dokument
SET fulltext_autor = to_tsvector('simple', autor)
;

/* Erzeuge den zugehörigen Index */
CREATE INDEX fulltext_autor_index ON dokument USING gin(fulltext_autor);

/* Passe den Index bei jedem UPDATE und jedem INSERT an. */
CREATE TRIGGER fulltext_autor_update BEFORE INSERT OR UPDATE
ON dokument
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(fulltext_autor, 'pg_catalog.simple' , autor);
;


/******************************************************************************
 * Finde alle Dokumente vom Autor 'Kowarschick':
 ******************************************************************************/

SELECT did, autor, titel, inhalt
FROM   dokument
WHERE  fulltext_autor @@ to_tsquery('simple', 'Kowarschick')
;

/******************************************************************************
 * Finde alle Dokumente vom Autor 'Märtin':
 ******************************************************************************/

SELECT did, autor, titel, inhalt
FROM   dokument
WHERE  fulltext_autor @@ to_tsquery('simple', 'Märtin')
;

/******************************************************************************
 * Finde alle Dokumente die 'Vorlesung' oder 'Datenbank%' enthalten.
 * Funktionert erst ab PostgreSQL 8.4.
 ******************************************************************************/

SELECT did, autor, titel, inhalt
FROM   dokument
WHERE  fulltext @@ to_tsquery('german', 'Vorlesung | Datenbank:*')
;

/******************************************************************************
 * Finde alle Dokumente die 'Vorlesung' und 'Datenbank%' enthalten.
 * Funktionert erst ab PostgreSQL 8.4.
 ******************************************************************************/

SELECT did, autor, titel, inhalt
FROM   dokument
WHERE  fulltext @@ to_tsquery('german', 'Vorlesung & Datenbank:*')
;

/******************************************************************************
 * Finde alle Dokumente die 'Vorlesung' und 'Kowa%' enthalten.
 * Funktionert erst ab PostgreSQL 8.4.
 ******************************************************************************/

SELECT did, autor, titel, inhalt
FROM   dokument
WHERE  fulltext @@ to_tsquery('german', 'Vorlesung & Kowa:*')
;

/******************************************************************************
 * Finde alle Dokumente die 'Vorlesung' und 'Kowa%', aber nicht 'MMProg' enthalten.
 * Funktionert erst ab PostgreSQL 8.4.
 ******************************************************************************/

SELECT did, autor, titel, inhalt
FROM   dokument
WHERE  fulltext @@ to_tsquery('german', 'Vorlesung & Kowa:* & !MMProg')
;

/******************************************************************************
 * Finde alle Dokumente die 'Michael Lutz' (als Phrase) enthalten.
 * FUNKTIONIERT NOCH NICHT!
 ******************************************************************************/


/******************************************************************************
 * Finde alle Dokumente die 'MM % % WiSe' (als Phrase) enthalten.
 * FUNKTIONIERT NOCH NICHT!
 ******************************************************************************/

