tsvektor
Verwenden Sie den tsvector
Typ, der Teil der Textsuchfunktion von PostgreSQL ist.
postgres> select 'What are Q-type Operations?'::tsvector;
tsvector
-------------------------------------
'Operations?' 'Q-type' 'What' 'are'
(1 row)
Sie können auch bekannte Operatoren für tsvectors verwenden:
postgres> select 'What are Q-type Operations?'::tsvector
postgres> || 'A.B.C''s of Coding'::tsvector;
?column?
--------------------------------------------------------------
'A.B.C''s' 'Coding' 'Operations?' 'Q-type' 'What' 'are' 'of'
Aus der tsvector-Dokumentation:
Wenn Sie auch eine sprachspezifische Normalisierung durchführen möchten, wie das Entfernen gemeinsamer Wörter ('the', 'a' usw.) und Multiplikationen, verwenden Sie den to_tsvector
Funktion. Es weist auch verschiedenen Wörtern für die Textsuche Gewichtungen zu:
postgres> select to_tsvector('english',
postgres> 'What are Q-type Operations? A.B.C''s of Coding');
to_tsvector
--------------------------------------------------------
'a.b.c':7 'code':10 'oper':6 'q':4 'q-type':3 'type':5
(1 row)
Vollständige Textsuche
Offensichtlich ist es teuer, dies für jede Zeile in einer Abfrage zu tun – daher sollten Sie den tsvector in einer separaten Spalte speichern und ts_query() verwenden, um danach zu suchen. Auf diese Weise können Sie auch einen GiST-Index für den tsvector erstellen.
postgres> insert into text (phrase, tsvec)
postgres> values('What are Q-type Operations?',
postgres> to_tsvector('english', 'What are Q-type Operations?'));
INSERT 0 1
Die Suche erfolgt mit tsquery und dem Operator @@:
postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
phrase
-----------------------------
What are Q-type Operations?
(1 row)