2016-08-04 32 views
0

Dies funktioniert wie erwartet:Wie konfigurieren Sie PostgreSQL Tokenization für die Volltextsuche?

# select to_tsvector('SICK FOTOCEL VS#VE180-P132') @@ 'p132'::tsquery; 
?column? 
---------- 
t 

Wenn jedoch das '#' wird ersetzt durch ein '/' i bekommen

# select to_tsvector('SICK FOTOCEL VS/VE180-P132') @@ 'p132'::tsquery; 
?column? 
---------- 
f 

Dies liegt daran, VS/VE180-P132 als Datei Token klassifiziert wird. Dies ist in unserem Anwendungsfall nicht korrekt. Wie ändere ich dieses Verhalten? Zum Beispiel, die Token-Typen E-Mail, URL und Datei fallen lassen?

Antwort

0

Sie können dieses Verhalten nicht ändern, wenn Sie einen neuen Parser in C

schreiben wollen, aber Sie die Abhilfe zu ersetzen, bestimmte Zeichen in allen Strings verwenden können, bevor Sie sie zur Volltextsuche verwenden:

SELECT to_tsvector(regexp_replace('SICK FOTOCEL VS/VE180-P132', '[/.]', ' ')) 
     @@ to_tsquery(regexp_replace('p132', '[/.]', ' ')); 
+0

Diese Problemumgehung ist wirklich hässlich. Aber wenn das wirklich der einzige Weg ist, dies zu tun, muss ich das akzeptieren :) – rmuller

+0

Sie können Ihren Index auch so definieren, und es wird nicht so schlimm weh tun, es sei denn, Sie müssen es von Hand eingeben. –