Проблема с выборкой, используя 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 шт):
Посмотрите на результат такого запроса
select to_tsquery('товар+син+50:*')
Возвращается 'товар':* <-> 'син':* <-> '+50':*
То есть +50 воспринимается как отдельная лексема.
Попробуйте заменять не на плюс, а на <->
select to_tsquery('товар<->син<->50:*')
Возвращается 'товар' <-> 'син' <-> '50':*