PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Recherche en texte intégral PG sur les rails à l'aide de la gemme pg_search pour la sous-chaîne

Je suis l'auteur et le mainteneur de pg_search.

Malheureusement, le tsearch de PostgreSQL ne divise pas par défaut les adresses e-mail et ne vous permet pas de faire correspondre des parties. Cela pourrait fonctionner si vous avez activé :trigram rechercher, car il correspond à des sous-chaînes arbitraires qui apparaissent n'importe où dans le texte interrogeable.

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

Je l'ai confirmé en exécutant la commande suivante dans psql :

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

Je sais que l'analyseur détecte les adresses e-mail, donc je pense que cela doit être possible. Mais cela impliquerait de construire un dictionnaire de recherche de texte dans PostgreSQL qui diviserait correctement l'adresse e-mail en jetons.

Voici la preuve que l'analyseur de recherche de texte sait qu'il s'agit d'une adresse e-mail :

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