Задать вопрос
@Snewer

Как выполнить релевантный поиск?

Здравствуйте!

Имеется таблица с информацией о некоторых моделях.
В таблице поля: "Марка модели", "Год выпуска", "Название" и т.п.

Дана строка "Марка модели год выпуска название другие параметры", при чем порядок может быть произвольным, а так же возможны опечатки. Как отсортировать данные по релевантности исходя из данной строки?

Марка модели может быть вида "модель 1", где "1" — играет ключевую роль в релевантности. То есть, цифры и строки длиной 1 нужно учитывать.

p.s. записей в таблице не много - порядка 10 000. Общий размер текста, из полей так же не большой — подобные описанным выше полям.

спасибо!
  • Вопрос задан
  • 527 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Smithson
@Smithson
20+ лет админю
Боюсь, что средствами mysql - никак. Надо писать обвязку на каком-либо языке программирования, парсить строку по словам и по ним выполнять поиск по всем столбцам.
Насчет опечаток почитайте про Soundex и про нечеткое сравнение строк. Дело это не на пять минут.
И делать это надо было на этапе заполнения базы. Сейчас придётся переделывать.
Ответ написан
Комментировать
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Fulltext Index может помочь теоретически, но лучше по автокомплиту поисковую строку формировать из базы. Это будет более эффективно.
Ответ написан
@Teermit
Правильное решение: использовать решения вроде Elastic.
Однако для этого Elastic надо куда-то поставить, что не всегда допустимо.
Любые другие решения будут костылём различной степени кривости.
Вариант с написанием обвязки будет катастрофически медленным, и, более того, не нужным, потому что всё можно сделать средствами СУБД
Костыльное решение, работающее на голой СУБД:
  • Для каждого ряда в БД используя самопальную версию поиска подстроки, допускающую ошибки, найти вхождения каждого поля в строку, по которой ведётся поиск.
  • Построить оценку каждого ряда, основанную на сумме длин найденных подстрок и количестве ошибок (этот пункт требует экспериментов на реальных данных).
  • Отсортировать результат по этой оценке
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы