Как я могу использовать tsvector на строку с числами? - PullRequest
1 голос
/ 18 февраля 2020

Я хотел бы использовать postgres запрос к столбцу, в котором есть строки, содержащие все числа, например:

FRUIT-239476234

Если я попытаюсь сделать запрос из этого:

select to_tsquery('FRUIT-239476234');

То, что я получаю:

'fruit' & '-239476234'

Я хочу иметь возможность искать только по числовой c части этого значения следующим образом:

239476234

Кажется, что он не может соответствовать этому, потому что он интерпретирует мой дефис как «отрицательный знак» и не думает, что 239476234 соответствует -239476234. Как я могу сказать postgres трактовать всех моих персонажей как текст и не пытаться быть умным в отношении чисел и дефисов?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Это делается анализатором текстового поиска, который не настраивается (если не считать написания вашего собственного анализатора в C, что поддерживается).

Самое простое решение - предварительно обработать все строки поиска заменив - пробелом.

0 голосов
/ 13 марта 2020

Ответ из будущего. После выхода версии 13 PostgreSQL вы сможете использовать для этого модуль dict_int .

create extension dict_int ;
ALTER TEXT SEARCH DICTIONARY intdict (MAXLEN = 100, ABSVAL=true);
ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR int WITH intdict;
select to_tsquery('FRUIT-239476234');

      to_tsquery       
-----------------------
 'fruit' & '239476234'

Но вам, вероятно, будет лучше создать свой собственный текст ПОИСК СЛОВАРЯ, а также копирование КОНФИГУРАЦИИ 'engli sh' и изменение копии, вместо того, чтобы изменять установленные по умолчанию. В противном случае вы рискуете, что обновление молча потеряет ваши изменения.

Если вы не хотите ждать v13, вы можете исправить это изменение обратно и скомпилировать в свою собственную версию расширение для предыдущего сервера.

...