Проблема с выборкой, используя to_tsquery postgresql

Использую функцию to_tsquery в целях улучшения поиска товаров на сайте. Например, на запрос пользователя "товар син 50" должен выдаться результат "товар большой синий размер 50". Все работает как и задумано, но проблема с цифрами. При наличии цифр в поисковом запросе товары не ищутся.

.whereRaw(
        `to_tsvector("product"."name") @@ to_tsquery('${
          !name ? '' : name.replace(/ /g, '+') + ':*'
        }')`,
      )

В итоге получается следующий запрос:

WHERE to_tsvector("product"."name") @@ to_tsquery('товар+син+50:*')

"товар большой синий размер 50" не войдет в выборку, если же из запроса убрать "50", то войдет Подскажите, пожалуйста, в чем может быть дело и как это исправить


Ответы (1 шт):

Автор решения: RusArt

Посмотрите на результат такого запроса

select to_tsquery('товар+син+50:*')

Возвращается 'товар':* <-> 'син':* <-> '+50':*

То есть +50 воспринимается как отдельная лексема.

Попробуйте заменять не на плюс, а на <->

select to_tsquery('товар<->син<->50:*')

Возвращается 'товар' <-> 'син' <-> '50':*

→ Ссылка