Wie in der Dokumentation erwähnt (und von AJcodez bemerkt), gibt es eine Lösung beim Erstellen einer dedizierten Spalte für Tsvector Index. Dann definiert einen Auslöser, der richtig Einfügungen zu indizieren URLs fängt:
CREATE test_url (url varchar NOT NULL, url_tsvector tsvector NOT NULL);
Dieses Verfahren wird alle nicht alphabetische Zeichen in einzelnen Raum transorm und die Zeichenfolge in eine tsvector drehen:
CREATE OR REPLACE FUNCTION generate_url_tsvector(varchar)
RETURNS tsvector
LANGUAGE sql
AS $_$
SELECT to_tsvector(regexp_replace($1, '[^\w]+', ' ', 'gi'));
$_$;
Nun einen Trigger schaffen, die ruft diese Funktion auf:
CREATE OR REPLACE FUNCTION before_insert_test_url()
RETURNS TRIGGER
LANGUAGE plpgsql AS $_$
BEGIN;
NEW.url_tsvector := generate_url_tsvector(NEW.url);
RETURN NEW;
END;
$_$
;
CREATE TRIGGER before_insert_test_url_trig
BEFORE INSERT ON test_url
FOR EACH ROW EXECUTE PROCEDURE before_insert_test_url();
Jetzt, wenn die URL eingefügt wird, wird das Feld 'url_tsvectorè' automatisch ausgefüllt.
INSERT INTO test_url (url) VALUES ('http://www.google.fr');
TABLE test_url;
id url url_tsvector
2 http://www.google.fr 'fr':4 'googl':3 'http':1 'www':2
(1 row)
Um FT-Suche auf URLs müssen Sie nur für dieses Feld abfragen.
SELECT * FROM test_url WHERE url_tsvector @@ 'google'::tsquery;
als Behelfslösung können Sie eine weitere Spalte/Attribut mit der URL und erkannten Wort-Separatoren, und suchen gegen diese stattdessen – AJcodez