Можно ли реализовать «умный» поиск по БД?

Решил сделать поиск по товарам на сайте. И тут возник вопрос, а как сделать "умный" поиск?
К примеру, есть товар с таким описанием "Выключатель legrand (Белый)". Если пользователь введет в поиске "выключатель", то ему выдаст много позиций. А вот если он захочет поискать "выключатель белый", то ему поиск ничего не выдаст. А как можно научить его понимать такие выражения?
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Это называется полнотекстовый поиск.
В самом примитивном варианте создаётся fulltext index на поля, по которым будем искать. При этом база данных берет каждую запись в таблице, разбивает её на слова, записывает их в индекс и для каждого слова указывает - в каких строках таблицы оно встречается.
После этого можно сделать запрос по нескольким словам.
Например,
SELECT * FROM goods WHERE MATCH(name) AGAINST ('+выключатель +белый' IN BOOLEAN MODE);

найдёт таки все белые выключатели

Но встроенный в MySQL полнотекстовый поиск работает так себе и обычно пользуются внешними системами, Spinx Search или Elasticsearch
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Elasticsearch с морфологией вам в помощь.
Ответ написан
Ваш ответ на вопрос

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

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