Поисковая персонализация работает путём пересортировки товаров, найденных вашим поисковым механизмом (ElasticSearch, Solr, Sphinx, Mongosearch и другие).
Смысл поисковой персонализации заключается в том, чтобы отсортировать общий результат поиска товаров в соответствии с интересами конкретного покупателя. То есть, сначала вы получаете список идентификаторов товаров от вашего поискового механизма, отсортированный так как считает нужным этот механизм, а затем дополнительно сортируете его с помощью REES46 по релевантности для покупателя.
Пример
Клиент ввел поисковый запрос. Ваш поисковый механизм вернул вам подходящие товары, например (перечислены идентификаторы):
- 33
- 8495
- 32
- 5473
- 456
- 48556
- 48564
- 6584
- 356
- 76243
Предположим, что эти товары соответствуют поисковому запросу и отсортированы в соответствии с правилами поискового механизма. Однако, может быть что клиенту больше подходят товары 346, 6584 и 456. Об этом вам может сказать REES46.
Вы передаете в API REES46 этот список идентификаторов товаров с помощью GET-запроса, и в ответ получаете отсортированный список тех же идентификаторов, но теперь релевантные клиенту товары находятся в начале списка:
- 356
- 6584
- 456
- 32
- 33
- 5473
- 48564
- 76243
- 8495
- 48556
Затем вы выводите эти товары в том порядке, в котором получили от REES46.
API
Для ранжирования поискового запроса отправьте GET
запрос на API REES46:
http://api.rees46.com/recommend?shop_id=КОД_МАГАЗИНА&ssid=КОД_СЕССИИ&recommender_type=rescore&items=СПИСОК_ТОВАРОВ_ЧЕРЕЗ_ЗАПЯТУЮ
где
shop_id
– код вашего магазина, полученный на странице настроек магазина;ssid
– идентификатор сессии пользователя, который можно получить из cookie с именемrees46_session_id
;recommender_type
– укажитеrescore
;items
– список товаров через запятую, например:33,566,72425,865735,6345,23446
.
Пример запроса:
http://api.rees46.com/recommend?shop_id=f95342356fa619749015b7225f3b7db3&ssid=f1bffffd-f3dd-4238-9541-5a135472765c&recommender_type=rescore&items=33,8495,32,5473,456,48556,48564,6584,356,76243
Пример ответа:
["356","6584","456","32","33","5473","48564","76243","8495","48556"]
Ответ возвращается в формате JSON.
Не сломайте сортировку
Важно учитывать, что когда вы, получив список идентификаторов, делаете SQL запрос вида:
SELECT * FROM items WHERE id IN ("752","34761","31091","32106","36508");
То СУБД не обязана соблюдать эту сортировку, и результаты будут выводиться в непредсказуемом порядке. Поэтому после выборки данных из БД необходимо либо заново отсортировать товары в порядке, как вернул их REES46, либо дописать SQL-запрос для сохранения порядка (см. ORDER BY FIELD для MySQL или ORDER BY CASE для Postgresql).
Обратите внимание
Не стоит передавать в API больше 1000 идентификаторов одновременно. Если у вас поиск выдает очень много рекомендаций, лучше разбивать сортировку на страницы по 200 товаров.
Нюанс с ssid
В некоторых случаях (пользователь совсем новый, только что зашел на сайт и сразу попал в результаты поиска) cookie с именем rees46_session_id может иметь пустое значение. В этом случае необходимо инициализировать сессию пользователя, используя JS SDK, PHP SDK или Ruby SDK, либо не отправлять запрос на сортировку до тех пор, пока cookie не приобретёт значение (обычно это происходит при ближайшем обновлении страницы пользователем).