Postgresql полный текст совпадение неожиданно - PullRequest
0 голосов
/ 18 сентября 2018

Глядя на следующие запросы:

1. select to_tsvector('xyz-abc-testbed') @@ to_tsquery('abc')  # true
2. select to_tsvector('xyz/xyz-abc-testbed') @@ to_tsquery('abc')  # false

Тогда я понял, что:

select to_tsvector('xyz-abc-testbed')
   to_tsvector
----------------------------------------------
'abc':3 'testb':4 'xyz':2 'xyz-abc-testb':1

Но

select to_tsvector('xyz/xyz-abc-testbed')
   to_tsvector
----------------------------------------------
'xyz/xyz-abc-testbed':1

Похоже, что "/" очень сильно влияет на результат to_tsvector. Но я не нахожу объяснения в документации PG.

Пожалуйста, объясните, как '/' влияет на tv_tsvector, или укажите некоторую документацию, объясняющую это. Заранее спасибо.

1 Ответ

0 голосов
/ 18 сентября 2018

Первым шагом в обработке полнотекстового поиска является парсер , который разбивает строку на токены и использует эвристику для присвоения им типа.Дальнейшая обработка зависит от типа.

Функция ts_debug полезна для анализа происходящего:

SELECT alias, description, lexemes
FROM ts_debug('xyz/xyz-abc-testbed');

 alias |    description    |        lexemes        
-------+-------------------+-----------------------
 file  | File or path name | {xyz/xyz-abc-testbed}
(1 row)

SELECT alias, description, lexemes
FROM ts_debug('xyz-abc-testbed');

      alias      |           description           |      lexemes      
-----------------+---------------------------------+-------------------
 asciihword      | Hyphenated word, all ASCII      | {xyz-abc-testbed}
 hword_asciipart | Hyphenated word part, all ASCII | {xyz}
 blank           | Space symbols                   | 
 hword_asciipart | Hyphenated word part, all ASCII | {abc}
 blank           | Space symbols                   | 
 hword_asciipart | Hyphenated word part, all ASCII | {testbed}
(6 rows)

PostgreSQL интерпретирует строку с / в качестве пути к файлу.Он не будет разбивать путь к файлу на части, как это происходит с переносом слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...