PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PG пълнотекстово търсене в релси, използвайки pg_search gem за подниз

Аз съм авторът и поддържащият pg_search.

За съжаление, tsearch на PostgreSQL по подразбиране не разделя имейл адресите и не ви позволява да съпоставяте части. Може да работи, ако сте включили :trigram търсене обаче, тъй като съвпада с произволни поднизове, които се появяват навсякъде в търсения текст.

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

Потвърдих това, като изпълних следната команда в psql:

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

Знам, че анализаторът открива имейл адреси, така че мисля, че трябва да е възможно. Но това ще включва изграждане на речник за текстово търсене в PostgreSQL, който правилно ще раздели имейл адреса на токени.

Ето доказателство, че анализаторът за текстово търсене знае, че това е имейл адрес:

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. Допълване на нули вляво в postgreSQL

  2. Как да променя полета в новия PostgreSQL JSON тип данни?

  3. Вземете всички външни ключове с помощта на JDBC

  4. PG::SyntaxError за rails приложение

  5. postgresql - не може да създаде база данни - OperationalError:изходна база данни template1 е достъпна от други потребители