PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyszukiwanie pełnotekstowe PG na szynach przy użyciu klejnotu pg_search dla podciągu

Jestem autorem i opiekunem pg_search.

Niestety, tsearch PostgreSQL domyślnie nie dzieli adresów e-mail i pozwala na dopasowanie do części. Może zadziałać, jeśli włączysz :trigram szukaj jednak, ponieważ dopasowuje dowolne podciągi, które pojawiają się w dowolnym miejscu w przeszukiwanym tekście.

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

Potwierdziłem to, uruchamiając następujące polecenie w psql:

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

Wiem, że parser wykrywa adresy e-mail, więc myślę, że musi to być możliwe. Ale wymagałoby to zbudowania słownika wyszukiwania tekstowego w PostgreSQL, który właściwie podzieli adres e-mail na tokeny.

Oto dowód, że parser wyszukiwania tekstu wie, że jest to adres e-mail:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracja bazy danych z Postgres do MS SQL Server

  2. Połączenie Postgres jest wolne od PHP

  3. Jak uzyskać czas tworzenia bazy danych w PostgreSQL 9.0?

  4. Przekazywanie listy parametrów do SQL w psycopg2

  5. Postgres Zmień liczbę całkowitą kolumny na Boolean