Есть таблица с названиями медицинских препаратов.
Нужно составить запрос так, чтобы он находил их более качественно.
Сейчас запрос выглядит вот так
select
ts_rank(tsv, q) as rank,
"PRODUCT_NAME",
ts_headline('russian', "PRODUCT_NAME", q)
from nomenclature,
to_tsquery('russian', 'арбидол & капс') as q,
to_tsvector('russian',"PRODUCT_NAME") as tsv
where tsv @@ q
order by rank DESC
limit 10
Но при такой постановке, если в поиск например передать
to_tsquery('russian', 'арбидол & капс')
,
то не будут найдены совпадения со словом "капсулы", если же передать
to_tsquery('russian', 'арбидол & капсулы')
то не будут найдены "капс" и т.д.
Проблема в том, что товары могут иметь названия с сокращениями или без.
Кстати та же проблема возникает например для товаров
Арбидол Максимум капс. 200мг №10
и
Арбидол Максимум капс. 200 мг №20
в одном случае 200мг без пробела, а в другом 200 мг - с пробелом.
Если пользователь забьет в поиске просто 200, то найдено будет только то, что с пробелом, т.е. не выполняется поиск по части слова.
Как сделать так чтобы это было возможно. Без дополнительного софта для поиска - только штатными средствами.