PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PG pesquisa de texto completo em trilhos usando pg_search gem para substring


Eu sou o autor e mantenedor do pg_search.

Infelizmente, o tsearch do PostgreSQL por padrão não divide endereços de e-mail e permite que você compare com partes. Pode funcionar se você ativou :trigram search, no entanto, uma vez que corresponde a substrings arbitrárias que aparecem em qualquer lugar no texto pesquisável.
pg_search_scope :search_by_detail,
                :against => [
                  [:first_name,'A'],
                  [:last_name,'B'],
                  [:email,'C']
                ],
                :using => {
                  :tsearch => {:prefix => true},
                  :trigram => {}
                }

Confirmei isso executando o seguinte comando no psql:
grant=# SELECT plainto_tsquery('example.com') @@ to_tsvector('english', '[email protected]');
 ?column? 
----------
 f
(1 row)

Eu sei que o analisador detecta endereços de e-mail, então acho que deve ser possível. Mas isso envolveria a construção de um dicionário de pesquisa de texto no PostgreSQL que dividiria corretamente o endereço de e-mail em tokens.

Aqui está a evidência de que o analisador de pesquisa de texto sabe que é um endereço de e-mail:
grant=# SELECT ts_debug('english', '[email protected]');
                                  ts_debug                                   
-----------------------------------------------------------------------------
 (email,"Email address",[email protected],{simple},simple,{[email protected]})
(1 row)