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

PG fuldtekstsøgning på skinner ved hjælp af pg_search gem for understreng

Jeg er forfatter og vedligeholder af pg_search.

Desværre opdeler PostgreSQL's tsearch som standard ikke e-mail-adresser og giver dig mulighed for at matche med dele. Det kan måske virke, hvis du har slået :trigram til søg dog, da det matcher vilkårlige understrenge, der vises hvor som helst i den søgbare tekst.

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

Jeg bekræftede dette ved at køre følgende kommando i psql:

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

Jeg ved, at parseren registrerer e-mailadresser, så jeg tror, ​​det må være muligt. Men det ville involvere at bygge en tekstsøgningsordbog i PostgreSQL, der ville opdele e-mailadressen korrekt i tokens.

Her er bevis på, at tekstsøgningsparseren ved, at det er en e-mailadresse:

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



  1. PHP, MySQL, PDO Transaktion - Kan rollBack() bruges efter commit() er blevet kaldt?

  2. Hvorfor får jeg et andet resultat, når jeg bruger indvendig sammenføjning

  3. Hvordan finder jeg ud af, om der findes en tabel? MySql

  4. Flere joinforbindelser til samme tabel