@Malkolm163

Как искать полнотекстовым для частей слова?

Есть таблица с названиями медицинских препаратов.
Нужно составить запрос так, чтобы он находил их более качественно.
Сейчас запрос выглядит вот так
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, то найдено будет только то, что с пробелом, т.е. не выполняется поиск по части слова.
Как сделать так чтобы это было возможно. Без дополнительного софта для поиска - только штатными средствами.
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Так как тут большое количество названий, то full text поиск скорее всего слабо подходит. Я бы попробовал pg_trgm, он очень хорошо себя показал по скорости поиска частичных слов, но это надо проверять на каждой конкретной задаче.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы