Небольшой собственный материал о способе, выбранном для повышения эффективности поиска на сайте
«АвтоПандора».
Главная проблема на вышеупомянутом сайте заключается в том, что в каталоге присутствует более 200 тысяч наименований запчастей (на данный момент — около 240 тысяч, но судя по некоторым косвенным симптомам, это ещё цветочки), плюс куча тематических разделов, и разобраться в этой каше каким-то одним стандартным средством поиска (а тем более представить эту кашу в удобоваримом виде посетителю), мягко говоря, не слишком просто.
Какие стандартные средства имеются в виду?
Ну, во-первых, это предоставляемый Яндексом поиск по сайту. Недостатки — в результатах поисковой выдачи отсутствуют ссылки на страницы, не проиндексированные Яндексом. А индексирует он страницы долго, а то и вовсе не, исходя из своих секретных алгоритмов, тогда как ассортимент меняется каждый день: пришёл покупатель, продали ему лямбда-зонд — всё, ассортимент изменился. Яндекс узнает об этом позже, в лучшем случае — через месяц, когда ассортимент поменяется ещё сотни или тысячи раз. Кроме того, Яндекс не позволяет впихнуть в поисковую выдачу, скажем, ссылку на корзину (чтобы можно было сразу кинуть в корзину найденную запчасть). А хотелось бы.
Во-вторых, это собственный программный механизм поиска на PHP. Находит всё что угодно, при условии точного соответствия поискового запроса данным в базе. Позволяет оформить интерфейс поисковой выдачи по своему желанию, в том числе с кнопками добавления в корзину. Недостатки — не понимает синонимов (если не научить, конечно, но объём синонимов, сравнимый с накопленным Яндексом, увы, дело практически недостижимое), терпеть не может грамматических и орфографических ошибок, транслитерации и неверно переключенной раскладки клавиатуры. Правда, может обнаруживать сходство между некоторыми словами (к примеру, «абсорбер» и «адсорбер»), но для детекции ошибок этого умения даже при тонкой настройке либо недостаточно, либо чересчур — начинает обнаруживать сходство между словами «Ливерпуль» и «Манчестер».
Немного поразмыслив, разработчик (он же — автор данного поста) пришёл к выводу о необходимости создания многоступенчатого гибридного поиска, своего рода поэтапной фильтрации поисковых запросов посетителей сайта. Через некоторое время были выработаны
три основных постулата гибридного поиска, которые приведены ниже:
1. Посетитель ничего не должен знать о многоступенчатости поиска — он должен сразу получать поисковую выдачу.
2. Посетителя категорически нельзя загружать сложными формами поиска с кнопками типа «и/или», «только в разделе/везде» — весь внешний инструментарий должен представлять собой поисковую строку и кнопку «Найти».
3. В зависимости от разных поисковых запросов поисковая выдача должна быть сформирована разными программными средствами.
Для начала посетители сайта, пользующиеся поиском по сайту (а соответственно — и поисковые запросы), были условно разделены на три категории, приведённые ниже.
1-я категория. Те, кто ищет определённые разделы сайта (например, «запчасти», «контакты» или «автосервис»). Их поисковые запросы, как видно из примеров, сравнительно короткие, общераспространённые и легко предсказуемые, а также соответствующие каждый одному конкретному разделу сайта. К этой же категории можно отнести «лентяев», вводящих простые поисковые запросы из некоего ленивого, случайного любопытства («ну-ка, что у них там за запчасти?»), а то и злорадства («щас посмотрим, как ваш поиск это проглотит!»). К слову говоря: как это ни смешно, но мне доводилось неоднократно встречать интернет-магазины запчастей, встроенный поиск которых (при наличии у них весьма серьёзного ассортимента) бодро рапортовал об отсутствии результатов по слову «запчасти».
2-я категория. Посетители с опытом поиска по сайту — то есть те, кто чаще всего вводит точные поисковые запросы, отчётливо понимая, что они хотят найти — как правило, поисковый запрос представляет собой часть наименования запчасти («патрубок cruze») или оригинальный номер производителя.
3-я категория. Посетители, набирающие поисковые запросы в неверной раскладке клавиатуры, с грамматическими или орфографическими ошибками, с использованием малораспространённых синонимов или наоборот, с жаргонизмами («дворник на лобовуху крузак»). Эту категорию можно по отношению к двум предыдущим категориям условно назвать «все остальные».
В результате механизм поиска приобрёл следующую логику. Привожу по шагам.
Шаг 1-й и главный. Посетитель сайта отправляет запрос, этот запрос обезвреживается (от всевозможных ахрефов, джаваскриптов, инклюдов и прочего мусора) и передаётся на анализ поисковому механизму.
Шаг 2-й. Первым делом поисковый механизм анализирует поисковый запрос посетителя на содержание так называемых «подставных» запросов. «Подставной» запрос, как ясно из его названия — это заранее заданный запрос, который выводится в выпадающей из поисковой строки подсказке и представляет собой простое слово или словосочетание, к примеру, «контакты» или «запчасти».
img01.jpg ( 74,28 килобайт )
Кол-во скачиваний: 6Если поисковый запрос точно соответствует «подставному», то вместо результатов поиска посетитель просто автоматически редиректится (переадресуется) в соответствующий раздел сайта при помощи отправки заголовка с адресом (HEADER). Этот подход представляется разработчику более уместным, нежели вывод в ответ на поисковый запрос «запчасти» фразы «да, они у нас есть, и их у нас много». Таким макаром на данном шаге отсеивается (точнее, обслуживается поисковым механизмом) 1-я категория посетителей.
Шаг 3-й. Обслуживание 2-й категории посетителей. Ну здесь всё сравнительно просто: запрос в MySQL с опцией LIKE и запросом данных из соответствующих полей таблиц, создание списка найденных запчастей, вывод на странице поисковой выдачи. C прерыванием поиска, если он успешен (то есть если найден хотя бы один результат). На данном шаге отсеивается (обслуживается) 2-я категория посетителей.
Шаг 4-й, финальный. Обслуживание 3-й категории посетителей, тех, которые «все остальные». Критерии: на 2-м шаге редиректа в другой раздел не произошло, 3-й шаг отрапортовал о нулевом количестве найденных результатов (благо механизм запросов в MySQL позволяет). Остаётся последняя инстанция — Яндекс. Пусть разбирается с синонимами, жаргоном и ошибками. Здесь также всё сравнительно несложно: редиректим пользователя на страницу поисковой выдачи Яндекса отправкой HEADER с указанием в адресной строке поискового запроса (благо Яндекс послушно принимает такие GET-запросы от любого web-сценария, а не только от собственной поисковой строки с водяным знаком, лишь бы поиск был предварительно настроен в инструментарии). Выглядеть такая строка будет приблизительно так:
https://yandex.ru/sitesearch?searchid=20229...%ED%E4%EE%F0%E0(обратите внимание на параметр searchid в адресной строке — он обозначает идентификатор поиска, параметр же text — это собственно поисковый запрос).
Напоследок добавлю, что косвенным свидетельством эффективности такого варианта поиска могут служить хотя бы неоднократные последующие возвраты пользователей поиска по сайту с новыми (уже другими, естественно) поисковыми запросами. Буду рад, если приведённый мной способ окажется вам полезным.
Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
|