Как сделать поиск который понимает суть запроса?

На сайте есть много категорий, например автомобили, запчасти, мобильные телефоны, недвижимость.
Задача сейчас стоит такая: нужно сделать поиск который будет понимать запрос и будет настраивать фильтры для данного запроса. То есть поиск не должен искать ключевые слова в заголовке и описание товара, а должен настраивать фильтры чтоб найти нужный товар.

Приведу несколько примеров:
  • красный айфон в Москве - система должна понимать что айфон относиться к категорий мобильных телефонов, производитель Apple, цвет красный тоже должен выбираться в отдельном фильтре, а в Москве относиться к фильтру местоположения, соотвественно выбираем страну Россия - Московская область
  • bmw e39 в Японий - выбирается категория автомобили, производитель Bmw, модель 5 серия, год производства 1996-2003, местонахождение страна Япония


таких примеров можно привести еще очень много, но думаю суть задачи ясна
характеристики всех товаров есть в базе данных

сейчас нужно сделать подсказки для поиска, то есть стоит задача преобразовать поисковой запрос в несколько вариантов поиска, один из которых выберет пользователь

но вопрос в том как это технически реализовать? в проекте уже используется elasticsearch, думаю тоже в нем создать индекс где будут все характеристики товаров, места, категорий и туда-же еще добавить какие-то кастомные запросы которые будут создавать администраторы

на сколько ли правильный такой подход? может у кого есть идей или опыт в реализации такой задачи
буду благодарен за любые полезные материалы или советы!

UPDATE: добавлю еще что сайт имеет много языков, и исправление ошибок в поисковом запросе рассматривается как отдельная задача, сейчас думаем только над тем как преобразовать запрос в настройки фильтра
  • Вопрос задан
  • 1136 просмотров
Пригласить эксперта
Ответы на вопрос 4
2ord
@2ord
Для этого необходимо, чтобы анализатор мог производить разбор частей речи языка, как минимум.
Тогда анализатор будет понимать смысл речи и извлекать нужные компоненты.
Есть технология NER.
Ответ написан
Комментировать
REZ1DENT3
@REZ1DENT3
web-developer
Смотри в сторону томита парсера, который умеет извлекать семантику из предложения.
Исходный код открыт: https://github.com/yandex/tomita-parser
Пример простой семантики: https://github.com/yandex/tomita-parser/blob/maste...
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Краем уха читал что умный поиск строится на многомерных векторах. Для каждого запроса строится многомерный вектор, а затем в проиндексированных данных ищется вектор с наименьшим углом к искомому. Копните в эту сторону.

P. S. Погуглил из интереса, оказывается даже ничего делать не надо, уже есть готовые решения, пусть они и платные https://searchbooster.io/ru/
Ответ написан
Комментировать
@sunsexsurf
IT & creative
Вы решаете задачу, которую решает Гугл, в целом.
в общем, путь, по которому можно пойти:

1/ прикрутить к вашей поисковой строке расстояние Левенштейна и искать совпадения. Уже будет работать. Плоховато, но лучше, чем ничего.
2/ Посчитать tf-idf на ваших документах и смотреть, что ввел пользователь. Будет работать значительно лучше
3/ построить w2v: каждому слову будет дан эмбеддинг (векторное представление), косинусные расстояния между векторами будут обозначать похожесть слов (синонимическую)
4/ Прикрутить Берт-подобные модели. Если сайт не какой-то специфический, можно даже не доучивать на вашем корпусе.
4 итерация - это, по сути, "предгенеративный" шаг. Потом начинаются большие языковые модели (типа огромного Ялма) и всякие вопросно-ответные системы типа чатЖПТ.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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