@dmitry_d

Как реализовать поиск в интернет-магазине с помощью Sphinx?

Задача усовершенствовать поиск на сайте dollsempire.ru. На основе анализа поисковых запросов на сайте решили, что больше подойдет структура поиска из нескольких этапов:

1-й этап поиска: точный поиск по усеченному индексу (возможно, составленному по большей части вручную) в котором будет сопоставление популярных запросов/тэгов/категорий/итп и "посадочных страниц" для них. Например, для запроса "лол омг" сразу открывалась страница https://dollsempire.ru/lol_suprise_omg.html
либо открывалась сетка с подходящими товарами уже отфильтрованными по какому-либо признаку и "зажатые фильтры" рядом, как например на сайте https://www.mvideo.ru/product-list-page-cls?q=ipho...
Для создания данного индекса мы сделаем подробную разметку страниц "page id", товаров "product id" и категорий/тэгов.

2-й этап: неточный поиск по словарю / поиск по большому индексу. Например часто народ вводит длинную фразу (видимо скопированную заранее) типа "Кукла Авиа Троттер – Avea Trotter, Школа Монстер" – очевидно, что тоже нужна конкретная кукла. Но у нас в "усеченном индексе" такой фразы с соответствующим линком скорее всего не будет, тк фраза слишком длинная, но в "большом индексе", составленном автоматически такая фраза находится с более чем 99% совпадением. В таком случае тоже имеет смысл открывать конкретную страницу, подходящую под этот запрос.

3-й этап: при неуспешности 1 и 2 этапа – выдается ранжированный список результатов (примерно как сейчас).

Вопрос: как это можно реализовать с помощью стандартных настроек Sphinx (или с небольшими доработками)?

Дополнительный вопрос: в идеале хотелось бы добавить в поиск "опечаточник" и "подсказки". Есть ли какие-то готовые решения сочетающиеся со Sphinx для этого?
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 4
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Возьмите Algolia. Для вас с такими запросами Sphinx и ElasticSearch пока рано)
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Это точно не реализуется Sphinx-ом.
Я перестал давно пользоваться готовыми движками, т.к. их качество - хуже некуда.

Что могу посоветовать: смотреть в сторону разбиения поисковой строки на отдельные типы данных, сравнивать две строки (из базы и то, что ввели в поиске) по наименьшей длине, находить "расстояние" между словами, считать общий "вес" всех слов для каждой из двух сравниваемых строк, использовать словарь синонимов.
"Опечаточник" и "подсказки" - будут доступны автоматически, если правильно научитесь вычислять "вес" строк.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Это все полностью реализация на стороне магазина,в целом несколько сотен строк кода.
Ответ написан
Комментировать
tumbler
@tumbler
бекенд-разработчик на python
Делаете последовательно три запроса к разным индексам, по-разному составленным и по-разному обрабатываемым. Добавляете исправление опечаток и подсказки - и всё. Не нужно никаких особых "функциональностей" из коробки.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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