PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PG-Volltextsuche auf Rails mit pg_search gem für Substring

Ich bin der Autor und Betreuer von pg_search.

Leider teilt die tsearch von PostgreSQL standardmäßig keine E-Mail-Adressen auf und ermöglicht Ihnen den Abgleich mit Teilen. Es könnte funktionieren, wenn Sie :trigram aktiviert haben search, da es mit beliebigen Teilstrings übereinstimmt, die irgendwo im durchsuchbaren Text erscheinen.

pg_search_scope :search_by_detail,
                :against => [
                  [:first_name,'A'],
                  [:last_name,'B'],
                  [:email,'C']
                ],
                :using => {
                  :tsearch => {:prefix => true},
                  :trigram => {}
                }

Ich habe dies bestätigt, indem ich den folgenden Befehl in psql ausgeführt habe:

grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
 ?column? 
----------
 f
(1 row)

Ich weiß, dass der Parser E-Mail-Adressen erkennt, also denke ich, dass es möglich sein muss. Aber es würde den Aufbau eines Textsuchwörterbuchs erfordern in PostgreSQL, das die E-Mail-Adresse ordnungsgemäß in Token aufteilen würde.

Hier ist der Beweis, dass der Textsuche-Parser weiß, dass es sich um eine E-Mail-Adresse handelt:

grant=# SELECT ts_debug('english', '[email protected]');
                                  ts_debug                                   
-----------------------------------------------------------------------------
 (email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)