Ответ 1
Если вы хотите, чтобы "AT & T" рассматривался как поисковое слово, вам понадобятся некоторые настраиваемые компоненты, потому что парсер по умолчанию разбивает его на два слова:
[email protected]@[local] =# select * from ts_parse('default', 'AT&T');
tokid | token
-------+-------
1 | AT
12 | &
1 | T
(3 rows)
[email protected]@[local] =# select * from ts_debug('simple', 'AT&T');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-------+--------------+------------+---------
asciiword | Word, all ASCII | AT | {simple} | simple | {at}
blank | Space symbols | & | {} | |
asciiword | Word, all ASCII | T | {simple} | simple | {t}
(3 rows)
Как вы можете видеть из документации для CREATE TEXT PARSER, это не очень тривиально, так как синтаксический анализатор, похоже, должен быть C-функцией.
Вы можете найти это сообщение о том, что кто-то получает "underscore_word", чтобы быть признанным в качестве одного токена полезным: http://postgresql.1045698.n5.nabble.com/Configuring-Text-Search-parser-td2846645.html