PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PG ricerca full-text sui binari usando pg_search gem per sottostringa

Sono l'autore e il manutentore di pg_search.

Sfortunatamente, tsearch di PostgreSQL per impostazione predefinita non divide gli indirizzi e-mail e ti consente di confrontare le parti. Potrebbe funzionare se hai attivato :trigram cerca, tuttavia, poiché corrisponde a sottostringhe arbitrarie che appaiono ovunque nel testo ricercabile.

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

L'ho confermato eseguendo il seguente comando in psql:

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

So che il parser rileva gli indirizzi e-mail, quindi penso che debba essere possibile. Ma comporterebbe la creazione di un dizionario di ricerca di testo in PostgreSQL che dividerebbe correttamente l'indirizzo email in token.

Ecco la prova che il parser di ricerca di testo sa che si tratta di un indirizzo email:

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