Database Reference
In-Depth Information
SELECT ts _ lexize( 'english _ stem' , 'Day''s' );
ts _ lexize
-----------
{day}
Die Volltextsuche funktioniert natürlich auch in anderen Sprachen. Wenn
Sie Deutsch installiert haben, probieren Sie Folgendes:
SELECT to _ tsvector( 'german' , 'was machst du gerade?' );
to _ tsvector
--------------------
'gerad':4 'mach':2
Da was und du gängig sind, werden sie im deutschen Wörterbuch als Stopp-
wörter markiert, während machst und gerade abgeleitet werden.
Lexeme indexieren
Die Volltextsuche ist sehr leistungsfähig. Doch wenn wir unsere Tabellen
nicht indexieren, ist sie auch langsam. Der EXPLAIN -Befehl ist ein mächti-
ges Werkzeug, wenn man sich ansehen möchte, wie Queries intern geplant
werden.
EXPLAIN
SELECT *
FROM movies
WHERE title @@ 'night & day' ;
QUERY PLAN
---------------------------------------------------------------------------
Seq Scan on movies (cost=10000000000.00..10000000001.12 rows=1 width=68)
Filter: (title @@ 'night & day'::text)
Beachten Sie die Zeile Seq Scan on movies . Das ist bei einer Query nur selten
ein gutes Zeichen, denn es bedeutet, dass die gesamte Tabelle abgesucht
wird, d. h., jede Zeile wird gelesen. Wir brauchen also einen Index.
Wir nutzen Generalized Inverted iNdex (GIN) - wie GIST eine Index-API - ,
um einen Index der Lexeme aufzubauen, um schnelle Queries zu ermögli-
chen. Der Begriff invertierter Index wird Ihnen bekannt vorkommen, wenn
Sie schon einmal mit Suchmaschinen wie Lucene oder Sphinx gearbeitet ha-
ben. Diese Datenstruktur ist zur Indexierung bei Volltextsuchen üblich.
CREATE INDEX movies _ title _ searchable ON movies
USING gin(to _ tsvector( 'english' , title));
Search WWH ::




Custom Search