Das FTS verwendet dictionaries den Text zu normalisieren:
12,6. Wörterbücher
Wörterbücher verwendet Wörter zu beseitigen, die bei einer Suche (Stoppwörter) nicht in Betracht gezogen werden sollte, und zu Worte normalisieren, so dass verschiedene abgeleitete Formen des gleichen Wortes wird übereinstimmen. Ein erfolgreich normalisiertes Wort wird Lexem genannt.
So sind Wörterbücher verwendet, um Dinge zu werfen, die zu häufig oder bedeutungslos sind in einer Suche (Stoppwörter) zu prüfen und Stadt alles andere so zu normalisieren und Städte, zum Beispiel, wird übereinstimmen obwohl sie verschiedene Wörter sind.
uns irgend Ausgabe von ts_debug
Werfen wir einen Blick und sehen, was mit den Wörterbüchern vor sich geht:
=> select * from ts_debug('english', 'mortgage');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+----------+----------------+--------------+-----------
asciiword | Word, all ASCII | mortgage | {english_stem} | english_stem | {mortgag}
=> select * from ts_debug('simple', 'mortgage');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+----------+--------------+------------+------------
asciiword | Word, all ASCII | mortgage | {simple} | simple | {mortgage}
Beachten Sie, dass simple
verwendet das simple
Wörterbuch während english
verwendet das english_stem
Wörterbuch.
Die simple
dictionary:
arbeitet durch die Eingabe-Token Umwandlung Fall zu senken und es gegen eine Datei von Stop-Wörter zu überprüfen. Wenn es in der Datei gefunden wird, wird ein leeres Array zurückgegeben, wodurch das Token verworfen wird. Wenn nicht, wird die untere Form des Wortes als normalisiertes Lexem zurückgegeben.
Das simple
Wörterbuch löst nur Stoppwörter, Downcases, und das ist es. Wir können seine Einfachheit selbst sehen:
=> select to_tsquery('simple', 'Mortgage'), to_tsquery('simple', 'Mortgages');
to_tsquery | to_tsquery
------------+-------------
'mortgage' | 'mortgages'
Das simple
Wörterbuch ist zu einfach, um selbst einfache Plurale handhaben.
Also was ist das english_stem
Wörterbuch über? Das Suffix "Stem" ist ein Give Away: Dieses Wörterbuch wendet einen Stemming-Algorithmus auf zu konvertierende Wörter an (zum Beispiel) city und Städte zu derselben Sache.Von der fine manual:
12.6.6. Snowball Dictionary
Die Snowball Wörterbuch Vorlage basiert auf einem Projekt von Martin Porter, Erfinder des populären Porter's Stemming-Algorithmus für die englische Sprache. [...] Jeder Algorithmus versteht es, gängige Varianten von Wörtern auf eine Basis oder einen Stamm in ihrer Sprache zu reduzieren.
Und unten, dass wir sehen das english_stem
Wörterbuch:
CREATE TEXT SEARCH DICTIONARY english_stem (
TEMPLATE = snowball,
Language = english,
StopWords = english
);
Also das english_stem
Wörterbuch Wörter Stielen und wir können sehen, dass passieren:
=> select to_tsquery('english', 'Mortgage'), to_tsquery('english', 'Mortgages');
to_tsquery | to_tsquery
------------+------------
'mortgag' | 'mortgag'
Executive Summary: 'simple'
impliziert einfach gesinnte wörtliche Übereinstimmung, 'english'
gilt stemming (hoffentlich) produzieren besser zusammenpassen. Die Stemming-Turns Hypothek in Mortgag und das gibt Ihnen Ihr Spiel.
Fantastisch! Genau das habe ich gesucht - ich muss noch etwas Zeit im Handbuch verbringen. Vielen Dank! – phatskat
@mu ist zu kurz Haben Sie ein Problem mit Postgresql 9.6.1, wo nicht-lateinische Zeichen wie '你' in 'to_tsvector (Titel) @@ to_tsquery ('你')' konnte keine Zeichenfolge finden mit '你' in '你 好嗎'? – Growler
@Growler Noch nicht, klingen wie ein gutes Thema für eine neue Frage. –