Моё хобби ― автоматизация онлайн-ритейла. Уже много лет даже в свои выходные я не вылезаю из этого «болота». Да, наверное, это звучит дико и даже смешно. Как можно увлекаться таким скучным делом? — скажут одни. Что там увлекаться, это просто какая-то частная тема для уважающего себя архитектора ПО! — скажут другие.
Действительно, на первый взгляд, это, как говорится, недиссертабельная тема. Фактически, это сборная солянка из разных тем, тем или иным образом притащенных в e-commerce. И в итоге оказалась ровно тем, что я люблю: интеграция технологий.
И вот с 2016 я веду техноблог, hybrismart.com. Такая «хабра» в миниатюре, только на английском и с фокусом на близкую мне тему — разработку на SAP Commerce. У нас тут сформировалась небольшая компания из нескольких десятков тысяч авторов, но в блог пока что пишет только часть из них. Ну, хорошо, пишут пока немногие. Десяток. Но мы стараемся. В блоге уже накопилось под две сотни статей, преимущественно больших и очень больших на самые разные темы, тем или иным боком относящиеся к ecom. В существенной части это всё-таки персональный блог, поэтому отдуваюсь тут я, а не наша пиар-служба. Но это от души, правда.
Как легко догадаться из названия, hybrismart — про хайбрис (что это такое?). И почти все, кто его находит, знают о хайбрисе не понаслышке. Ну и наоборот: наверное, каждый разработчик на hybris хотя бы раз в блог заходил (конечно, не по доброй воли, нам гугл помогает!). Теперь вот и вы зашли. И чтобы вы там не потерялись, хочу провести небольшую экскурсию. Задавайте, пожалуйста, вопросы в самом конце.
Кто-то скажет, что где e-commerce, там шопинг карт, а где шопинг карт, там — e-commerce. Но эту шопинг-карт ещё нужно найти. Как и товары. И тут возникает тема, в которой число самодельных «велосипедов» зашкаливает: поиск по товарам.
Пожалуй, это самый «жирный» топик на моем блоге. В хайбрисе за поиск отвечает Apache Solr, один из двух крупных и повсеместно известных опенсорсных движков (вместе с ElasticSearch). Но как вы понимаете, специфики хайбриса в статьях про поиск — минимум. Просто потому, что у всех примерно одни и те же проблемы.
Итак, поехали.
Rauf Aliev, Timofey Klyubin
The Challenges Of Chinese And Japanese Searching
https://hybrismart.com/2019/08/18/the-challenges-of-chinese-and-japanese-searching/
Вместе с Тимофеем Клюбиным мы сделали гигантский обзор текстового поиска на иероглифических языках, описали типичные сложности у компьютеров с этими значками и способы их решения в Solr. Также вы узнаете про различные культурные и языковые особенности и специфику оформления фасетного поиска в Японии и Китае.
Тимофей кроме хайбриса и всяких айтишних штук давно изучает японский. Мне хотелось бы написать тут «а я — китайский», но увы. У меня труд родился в процессе глубокого изучения темы, вызванного нуждой по работе и желанием раз и навсегда закрыть вопросы, которые меня мучали, а Тимофей просто занимался любимым делом.
Поиск на японском и китайском поднимает проблемы, о которых вы даже не догадывались. Например, всмотритесь в подсказки гугла по слову «とうきょうえ» (tōkyōe), на которое гугл дает «東京駅» (tōkyōeki) (станция Токио). В данном случае оба слова являются разным написанием одного и того же, и поисковая система это знает. У японцев свои знаки пунктуации, два алфавита, сложная система с числительными, важен контекст. Все это мы описываем в деталях.
Rauf Aliev
Facet Search: The Most Comprehensive Guide. Best Practices, Design Patterns, Hidden Caveats, And Workarounds.
https://hybrismart.com/2019/02/13/facet-search-the-most-comprehensible-guide-best-practices-design-patterns/
А эта работа относится к фасетному поиску. Осторожно, там очень много букв, но есть удобное содержание с ссылками. Было бы концептуально сделать фасетный поиск по статье по фасетному поиску, но я вовремя себя остановил.
В статье предпринята попытка систематизировать знания и опыт в этой области и организовать эти знания в виде одной большой «простыни» с фактами, ссылками, и best practices. Наверное, она должна быть полезна тем, кто по роду работы связан с пользовательскими интерфейсами.
Несмотря на то, что фасеты — самая часто используемая концепция в екоммерс (после шоппинг карт), и всегда есть большой соблазн изобрести какое-нибудь колесо. Судя по тому, что мы видим на сайтах, очень многие этим пользуются, получая в результате много несостыковок и противоречий. Я постарался их собрать вместе с решениями, которые считаются общепринятыми.
Rauf Aliev
Autocomplete, Live Search Suggestions, and Autocorrection: Best Practice Design Patterns
https://hybrismart.com/2019/01/08/autocomplete-live-search-suggestions-autocorrection-best-practice-design-patterns/
Поскольку «поиски» сейчас пошли умные, и часто лучше пользователя знают, что он хотел найти, а устройства маленькие и неудобные, большое внимание уделяется Search Suggestions — способу сформулировать желаемый поисковый запрос за меньшее время, за минимальное число нажатий клавиш, кликов мыши или «тапов» по экрану.
В статье я делаю обзор темы, «лучших практик» и частых ошибок. Статья родилась, когда я проектировал систему умного автокомплита для одной крупной biotech-компании, делающего удобнее поиск по антителам и реагентам. «Умный автокомплит» предлагал завершение текущего слова в одно нажатие, опираясь на уже введённые слова, определённые правила сочетаемости и статистику запросов. Ближайший аналог из лингвистики — после ввода глагола с больше вероятностью идёет существительное, чем другой глагол.
Rauf Aliev
Search Analytics
https://hybrismart.com/2017/10/06/part2-sap-hybris-thinking-outside-the-box-part-2-of-4-video-russian-english-search-analytics/
Некоторые материалы представлены на блоге не в виде статей, а в виде видеороликов. Всего их там штук 40 наберется. К сожалению, такой формат пока ещё не прижился. Здесь я рассказываю про Search Analytics — механизм сбора и обработки статистики, имеющей отношение к действиям покупателей с вовлечением поиска по товарам. Я придумал этот механизм для большого продуктового магазина в Европе и перепроверил его ещё раз для той самой biotech-компании из предыдущего примера. Вкратце, идея сводится к тому, что действия покупателей могут много рассказать про то, как работает поиск, и где у него слабые места. Например, статистика показывает, что некоторые товары ищут часто, но кладут в корзину редко (высокая цена? Устаревшие модели?), а другие — кладут часто, но довольно плохо ищут (подсказки?), а за третьими готовы прокликивать несколько страниц результатов поиска (какие-то нерелевантные товары вылезают вперед?). В общем, это такой Google Analytics, но — для поиска.
Rauf Aliev
Multi-line Search
https://hybrismart.com/2017/04/07/multi-line-product-search-for-bulk-orders/
Иметь свой блог удобно тем, что туда можно выгружать идеи и эксперименты и высвобождать мозги под что-нибудь более актуальное и новое. В этой статье я описал концепцию «многострочного поиска» для B2B-сайтов, которая когда-то в свое время была актуальна.
Идея в том, что часто удобно искать на сайте, скопипастив целую группу артикулов или названий товаров в поле для поиска, чем делать это одной строчкой за раз.
Rauf Aliev
Product Image Visual Search
https://hybrismart.com/2018/08/26/product-image-visual-search-in-sap-commerce-cloud-hybris-commerce/
В этой статье я описываю поиск похожих товаров — по цвету или форме. Это довольно «классическая» тема, но на практике, по непонятной мне причине, редко реализуемая. Я сделал прототип и описал матчасть. Практически все статьи подобного характера сопровождаются видео, как работает прототип с SAP Commerce, и эта — не исключение. Для интеграции с Apache Solr я использовал Lire (https://github.com/dermotte/lire).
Rauf Aliev
More Like This In SOLR
https://hybrismart.com/2017/02/05/more-like-this-in-hybris-solr-search/
Если в прошлой статье мы искали похожие товары по цвету и размеру, то тут показываются похожие по чёрт знает чему. Система рассчитывает и упорядочивает товары по принципу похожести индексируемого контента — описаний товаров, названий, характеристик. Тем больше сходства, тем ближе товары будут в таких «кластерах» друг к другу. Для пользователя же мы можем вывести товары, находящиеся поблизости в таком «пространстве похожестей», которые, скорее всего, окажутся товарами-заменителями.
Rauf Aliev
Concept Aware Search: Automatic Facet Discovery
https://hybrismart.com/2017/06/25/concept-aware-search-automatic-facet-discovery-in-hybris/
Здесь я тоже описываю интересный эксперимент и прототип: система выставляет фасеты самостоятельно, основываясь на введённом поисковом запросе. Например, если вы ищите что-то запросом «красное платьишко 39 размера», то вам надо показывать не товары, у которых все эти слова есть в описании или названии, а товары, отфильтрованные по тегу «красный», «платье» и «размер 39». Для русского языка понадобятся ещё танцы с бубнами, а с английским все работает уже сейчас. Внутри есть демка, показывающая разницу между тем, как работает дефолтный поиск и он же, но с моей логикой поверх. Называется, почувствуйте разницу. Однако, нужно отметить, что такой подход всё ещё блещет сайд-эффектами, и нужно очень тщательно настраивать систему, чтобы она удовлетворяла всех или почти всех.
Rauf Aliev
Enhanced Multi-Word Synonyms and Phrase Search
https://hybrismart.com/2017/08/09/enhanced-multi-word-synonyms-and-phrase-search/
Есть известная проблема в SOLR (и это не только с хайбрисом), что многословные синонимы работают очень криво. С однословными ещё кое-как работает, но тоже со своими сложностями. В блоге описано решение, позволяющее обойти эти проблемы и сделать поиск умнее. При отстутствии однозначности система перебирает разные варианты замен и выбирает наиболее «выигрышную» замену.
На блоге есть ещё пара десятков статей на тему поиска. А на этом прекрасном месте тема поиска уступает теме расчёта акций и скидок и прочей лояльности.
«Купи два пуховика по цене трёх и получи один в подарок!». Что только маркетологи не придумают, чтобы программисты не скучали. Делаешь полгода совершенный «движок» акций, который умеет вообще всё и ещё немножко, и тут приходит менеджер с очередной идеей, из-за которой нужно переписывать половину! В хайбрисе тоже было два поколения таких «движков». Разработчики решили не изобретать велосипед и использовали JBoss Drools, довольно мощную систему управления бизнес-правилами, которая интегрирована в хайбрис для темы акционных механик, темы узкой, но разнообразной в своей узости.
Если в двух словах, то Drools — это среда выполнения бизнес-правил. Механизм обрабатывает так называемые «факты» — входные данные, — и выдаёт результат в результате обработки правил и фактов. В хайбрисе для Drools сделали интерактивный редактор правил «в терминах e-commerce», а также представили API для расширения.
Rauf Aliev
‘Could Have Fired’
https://hybrismart.com/2016/06/04/hybris-6-could-have-fired-messages-poc/
Если какое-то правило срабатывает, то накладывается скидка. Правила применяются к корзине. Мой эксперимент, в описанной статье, показывает, что правила могут применяться не к корзине, но к комбинации корзины и текущего товара. То есть ты ещё на кнопку «купить» не нажал, а уже видишь, какие райские сады и великолепные дворцы сейчас будут добавлены в корзину как подарок. Предполагается, что это должно сделать пользователя счастливее и увеличить продажи.
Rauf Aliev
Distributed promotion calculation in the cluster. Promo as a service
https://hybrismart.com/2016/07/05/distributed-promotion-calculation-cluster-promo-as-a-service/
Так вот, этот самый Drools интегрирован в платформу. А она — монолит. Монолит — это когда весь код растёт из одного места. И вот когда пользователь тыкает иконочку на шопинг карт, на сервере миллионы маленьких гномиков начинают создавать контекст для Drools, потом заполнять его «фактами», куда входят товары, категории, свойства пользователя и всякое ещё разное, от чего может зависеть акция. И происходит это на той ноде в кластере, куда принесло пользователя лоад-балансером. И если там вдруг в это время перебои с процессорными ресурсами или памятью, то пользователь будет страдать. Затем, пользователю вручают скидку или подарок, а сервер всё это хозяйство подчищает. До следующего раза, когда оно опять начнёт создаваться. В статье я описываю свой эксперимент в вынесении Drools в отдельный кластер и вынос этапа этого конфигурирования Drools из запроса. Кроме того, что это повышает производительность, это ещё позволяет делать довольно сложные акции, где участвует, например, миллионы «фактов».
Rauf Aliev
Using hybris rule engine for product recommendations
https://hybrismart.com/2016/08/09/using-hybris-rule-engine-for-product-recommendations/
В этом примере я показываю, как можно устроить рекомендательную систему на основе правил, используя уже готовый механизм на основе Drools. В моём прототипе рекомендательной системы рекомендации можно создавать интерактивно, конструируя логику связей аксессуаров с товарами или похожих товаров между собой. Например, анчоусы к пиву, ментос — к коле, берёзовый сок — к буратино, мыло — к верёвке, розетку и фай-фай роутер — к чаю и кофе. Рекомендации — это всегда хорошо, когда они со смыслом.
Rauf Aliev
Complex Realtime Event Processing with Drools Fusion
https://hybrismart.com/2016/10/17/complex-realtime-event-processing-with-drools-fusion-integrating-with-hybris/
Ну раз я уже построил этот кластер, я не мог его не домучить и построить на его основе штуку, которая обрабатывала бы события на лету, накладывая на них на том же лету правила. Мне удалось разобраться и подключить Drools Fusion + Drools Server последней версии к hybris. Эта штука правильно называется Complex Event Processing. Смысл в том, что если у вас есть поток каких-либо данных для обработки в реальном времени, Drools Fusion позволяет делать это быстро и гибко. Например, в случае e-commerceтаких данных много. Самые простые — это клики и переходы.
Я записал и публикнул демку, из которой понятно, как это работает. Логи выгружаются куда-то в хранилище, а оттуда попадают в drools fusion для обработки. На языке drools пишутся правила, которые вытягивают из логов какие-то новые знания. В моей демке это просто идентификация фотограф/не фотограф по характеру посещённых страниц и кликов. Например, пользователь уже просмотрел тучу моделей и мы делаем вывод, что он любит моделей. Или долго водит мышью по фотографии любимого штатива, из чего мы делаем вывод, что он любит не только модели, но и штативы. Результат правил возвращается обратно в хайбрис и как-нибудь там может использоваться. Баннер показать или цены чуть-чуть понизить на фототехнику.
Основная особенность всего этого, что обрабатывается поток событий в реальном времени. В моём примере — это нахождение как минимум пяти страниц одной тематической группы за последние 30 секунд для одного пользователя.
Второй важный пункт в том, что такая система очень масштабируема, ведь каждый сервер работает независимо. В то время ещё была жива встроенной в хайбрис персонализация. Её потом заменили на платный сервис. Она была жутко тормозная, и поэтому её мало кто использовал. Здесь же нагружаются серверы, софт которых не стоит ничего: он бесплатен. А в хайбрис потом пропихиваются уже готовые решения, которые нужно там тупо визуализировать.
Rauf Aliev
Reactive Rule-based Dynamic Forms
https://hybrismart.com/2018/01/04/reactive-rule-based-dynamic-forms-in-hybris-using-drools-7/
Drools также можно использовать для автоматизации сложных форм, и в своём эксперименте я показываю, как это может быть достигнуто. В этом эксперименте я демонстрирую как можно реализовать многостраничную, многоэтапную форму, у которой состав и конфигурация полей и шагов меняется в зависимости от введённой информации в другие поля. Такая логика довольно сложно реализуется в стандартных подходах к формам, и её программирование значительно облегчается, когда для описания правил используется Drools.
Чтобы плавно закончить тему с Drools и начать тему про всякое разное в e-commerce и хайбрисе, я представлю ещё подробный обзор акционных механик.
Rauf Aliev
Promotion Mechanics and Their Implementation in Hybris
https://hybrismart.com/2017/04/30/promotion-mechanics-and-their-implementation-in-hybris-6-x/
Замечаете, почти все темы не совсем и про хайбрис. Там везде он каким-то боком есть, но в целом e-commerce— это не вещь в себе. Всё связано со всем.
Конечно, на сайте есть ещё десятки материалов, которые довольно сложно понять тем, кто вообще не разбирался с хайбрисом.
Rauf Aliev
Merging Carts When A Customer Logs In: Problems, Solutions, and Recommendations
https://hybrismart.com/2019/02/24/merging-carts-when-a-customer-logs-in-problems-solutions-and-recommendations/
Например, в этой статье я описываю проблему объединения корзин после аутентификации. Это когда вы положили пятьдесят разных уточек в корзину, а потом авторизовались, а магазин туда подмешал выбранных с прошлого раза 50 зайчиков. Есть разные стратегии по тому, как разделять уточек и зайчиков в этом примере, и я их разбираю. Стратегии разбираю, не зайчиков.
Rauf Aliev
Hybris Impex Preprocessor
https://hybrismart.com/2018/05/27/hybris-impex-preprocessor-impex/
Эта вот тема, наверное, полезна лишь для разбирающихся в хайбрисе. Привожу ее тут как пример статьи «для своих». Их меньшинство, но они занимают свою важную нишу.
В хайбрисе есть специальный формат для импорта и экспорта данных. Называется Impex и со стороны очень похож на обычный CSV. Там есть очень простой язык разметки, показывающий, что вот этот блок ниже — товары, а вот тот блок ещё — категории к ним. В целом, довольно удобно, но не тогда, когда у тебя двадцать почти одинаковых сайтов на разных языках, и каждый раз, когда добавляешь какой-нибудь интерфейсный компонент на все двадцать, нужно без ошибок скопипастить одно и то же двадцать раз и потом это поддерживать. У меня был такой проект, и я предложил решение с макросами на JSON, которые помогали создать импекс из импекса-с-макросами. Там не обычные макросы, а с циклами и параметрами.
Если вы ничего не поняли, то это нормально. У нас ещё и шутки есть, которые никто вне тусовки не понимает. Хотя они все грустные, не будем про это. У нас же серьёзная статья.
Rauf Aliev
Payments: A look Inside the Black Box
https://hybrismart.com/2019/09/08/payments-a-look-inside-the-black-box/
Я когда-то работал руководителем разработки в Chronopay, и с тех пор тема электронных платежей висела надо мной тёмной тяжёлой тучей, пока я её не приземлил вот в эту статью и освободил мозги под новые челенджи. Там собрано самое необходимое для понимания вопросов интеграции с платёжными шлюзами и сервисами, бест практисес и типичные недосмотры, которых нужно избегать (или использовать, если вы злой покупатель).
Rauf Aliev
Server-side PDF document generation
https://hybrismart.com/2017/06/15/pdf-and-sap-hybris/
А ещё раньше, во времена зачёток и пейджеров, я работал дизайнером и верстальщиком (впрочем, в коломенском педуниверситете и пейджинговой компании Мобилтелеком я тоже работал. Да, я уже старый). Не тем верстальщиком, который HTML, а тем, который про книжки и журналы, а иногда даже православные газеты, телепрограммы и ноты. И, конечно, я не мог обойти стороной тему Postscript и PDF, которые пугают очень многих из-за туманных и плохо документированных внутренностей. В статье я показываю, что не так страшен чёрт, и делаю обзор инструментов под генерацию PDF.
Rauf Aliev
Authentication with Hardware Security Keys via Webauthn in SAP Commerce Cloud
https://hybrismart.com/2019/05/23/authentication-with-hardware-security-keys-via-webauthn-in-sap-commerce-cloud/
В этой статье я описываю прототип авторизации по USB-ключикам, и последние (на момент статьи) продвиги в этом направлении на рынке, типа беспарольной авторизации, поддерживаемой браузерами. Удалось интегрировать с хайбрисом Yubikey, описываю как оно получалось (и получилось).
Rauf Aliev
Geofencing: Custom Shipping Zones
https://hybrismart.com/2016/10/19/geofencing-in-hybris-custom-shipping-zones/
Очередной эксперимент: использование размеченных областей на карте Google для различных целей в e-commerce: поиска оптимального склада, поиска доступных магазинов для самовывоза или лучшего доставщика, а может и самого факта возможности продать товар или услугу покупателю из этой зоны.
Работает это так: покупатель вводит адрес, а система его определяет в одну или несколько крупных зон. Различные компоненты системы зависят уже от этих крупных зон, а не от мелких компонентов адреса, таких как почтовый индекс.
Заодно разобрался с разработкой на Google AppEngine. Дело в том, что определение многоугольника (зоны), в который входит точка на карте (где покупатель), для ситуации «много зон сложной формы» потенциально может быть довольно «тяжелой» вычислительной задачей. И если есть возможность, ее лучше сразу делать на кластере, который может легко масштабироваться, а лучше еще и сам. И вот этот кейс отличный для Google AppEngine, где задействован Google DataStore для хранения параметров многоугольников, и Google Memcache для хранения кэша.
Rauf Aliev
Page Fragment Caching: Custom, with Varnish, Nginx, Memcached
https://hybrismart.com/2016/07/24/page-fragment-caching-for-hybris/
https://hybrismart.com/2016/07/27/varnish/
https://hybrismart.com/2016/07/30/hybris-page-fragment-caching-with-nginx-and-memcached/
В этих статьях я рассказываю про механизм умного кэширования частей страниц. Каждая из частей имеет составной ключ, говорящий о том, от чего она зависит. Например, для кэширования списка адресов доставки интернет-магазина (пример у меня есть в видео) составным ключом может быть идентификатор пользователя — тогда для разных пользователей будут использоваться разные кэши.
Механизм особо эффективен, если «тяжелый» функционал (в смысле использования памяти и процессора) вынесен из контроллеров страниц в компоненты, т.к. для кэширования контроллеров страниц описанная методика подходит не идеально.
Чтобы лучше понять идею, проще всего посмотреть на скриншоты шаблонов в середине статьи.
Rauf Aliev
Best Practices: Migrating Content To Hybris
https://hybrismart.com/2017/01/10/best-practices-migrating-content-to-hybris/
Migrating Data with Pentaho ETL (Kettle)
https://hybrismart.com/2017/01/15/migrating-data-with-pentaho-etl-kettle/
А тут много про миграцию данных: best practices, инструменты, архитектура моей самописной тулзы. Хоть тут и есть в названии слово «Hybris», но как и в прочих, эта статья не на 100% про хайбрис, не очень «гиковая», так что, надеюсь, будет понятна и интересна всем, кто знает, что такое «миграция данных в веб-проекте».
* * *
Также на блоге есть довольно подробно разобранные темы с чат-ботами (Facebook, Skype, кастом), вынесение хранения сессий за пределы хайбриса в отдельный сервис, разбор всего, что касается аутентификации и логин-форм, разбор особенностей реализации тревел-сервисов (заказ билетов, отели) — часть 1 и часть 2, а также собранные best practices по интеграции по product availability с внешними системами, и какие сложности этот процесс имеет, и много-много чего еще.
Какие еще темы вы бы хотели видеть разобранными подобным образом? По концепции блога они должны иметь отношение к ecommerce. Буду рад любым отзывам и предложениям.
Действительно, на первый взгляд, это, как говорится, недиссертабельная тема. Фактически, это сборная солянка из разных тем, тем или иным образом притащенных в e-commerce. И в итоге оказалась ровно тем, что я люблю: интеграция технологий.
И вот с 2016 я веду техноблог, hybrismart.com. Такая «хабра» в миниатюре, только на английском и с фокусом на близкую мне тему — разработку на SAP Commerce. У нас тут сформировалась небольшая компания из нескольких десятков тысяч авторов, но в блог пока что пишет только часть из них. Ну, хорошо, пишут пока немногие. Десяток. Но мы стараемся. В блоге уже накопилось под две сотни статей, преимущественно больших и очень больших на самые разные темы, тем или иным боком относящиеся к ecom. В существенной части это всё-таки персональный блог, поэтому отдуваюсь тут я, а не наша пиар-служба. Но это от души, правда.
Как легко догадаться из названия, hybrismart — про хайбрис (что это такое?). И почти все, кто его находит, знают о хайбрисе не понаслышке. Ну и наоборот: наверное, каждый разработчик на hybris хотя бы раз в блог заходил (конечно, не по доброй воли, нам гугл помогает!). Теперь вот и вы зашли. И чтобы вы там не потерялись, хочу провести небольшую экскурсию. Задавайте, пожалуйста, вопросы в самом конце.
ЖАЖДА ПОИСКА
Кто-то скажет, что где e-commerce, там шопинг карт, а где шопинг карт, там — e-commerce. Но эту шопинг-карт ещё нужно найти. Как и товары. И тут возникает тема, в которой число самодельных «велосипедов» зашкаливает: поиск по товарам.
Пожалуй, это самый «жирный» топик на моем блоге. В хайбрисе за поиск отвечает Apache Solr, один из двух крупных и повсеместно известных опенсорсных движков (вместе с ElasticSearch). Но как вы понимаете, специфики хайбриса в статьях про поиск — минимум. Просто потому, что у всех примерно одни и те же проблемы.
Итак, поехали.
Rauf Aliev, Timofey Klyubin
The Challenges Of Chinese And Japanese Searching
https://hybrismart.com/2019/08/18/the-challenges-of-chinese-and-japanese-searching/
Вместе с Тимофеем Клюбиным мы сделали гигантский обзор текстового поиска на иероглифических языках, описали типичные сложности у компьютеров с этими значками и способы их решения в Solr. Также вы узнаете про различные культурные и языковые особенности и специфику оформления фасетного поиска в Японии и Китае.
Тимофей кроме хайбриса и всяких айтишних штук давно изучает японский. Мне хотелось бы написать тут «а я — китайский», но увы. У меня труд родился в процессе глубокого изучения темы, вызванного нуждой по работе и желанием раз и навсегда закрыть вопросы, которые меня мучали, а Тимофей просто занимался любимым делом.
Поиск на японском и китайском поднимает проблемы, о которых вы даже не догадывались. Например, всмотритесь в подсказки гугла по слову «とうきょうえ» (tōkyōe), на которое гугл дает «東京駅» (tōkyōeki) (станция Токио). В данном случае оба слова являются разным написанием одного и того же, и поисковая система это знает. У японцев свои знаки пунктуации, два алфавита, сложная система с числительными, важен контекст. Все это мы описываем в деталях.
Rauf Aliev
Facet Search: The Most Comprehensive Guide. Best Practices, Design Patterns, Hidden Caveats, And Workarounds.
https://hybrismart.com/2019/02/13/facet-search-the-most-comprehensible-guide-best-practices-design-patterns/
А эта работа относится к фасетному поиску. Осторожно, там очень много букв, но есть удобное содержание с ссылками. Было бы концептуально сделать фасетный поиск по статье по фасетному поиску, но я вовремя себя остановил.
В статье предпринята попытка систематизировать знания и опыт в этой области и организовать эти знания в виде одной большой «простыни» с фактами, ссылками, и best practices. Наверное, она должна быть полезна тем, кто по роду работы связан с пользовательскими интерфейсами.
Несмотря на то, что фасеты — самая часто используемая концепция в екоммерс (после шоппинг карт), и всегда есть большой соблазн изобрести какое-нибудь колесо. Судя по тому, что мы видим на сайтах, очень многие этим пользуются, получая в результате много несостыковок и противоречий. Я постарался их собрать вместе с решениями, которые считаются общепринятыми.
Rauf Aliev
Autocomplete, Live Search Suggestions, and Autocorrection: Best Practice Design Patterns
https://hybrismart.com/2019/01/08/autocomplete-live-search-suggestions-autocorrection-best-practice-design-patterns/
Поскольку «поиски» сейчас пошли умные, и часто лучше пользователя знают, что он хотел найти, а устройства маленькие и неудобные, большое внимание уделяется Search Suggestions — способу сформулировать желаемый поисковый запрос за меньшее время, за минимальное число нажатий клавиш, кликов мыши или «тапов» по экрану.
В статье я делаю обзор темы, «лучших практик» и частых ошибок. Статья родилась, когда я проектировал систему умного автокомплита для одной крупной biotech-компании, делающего удобнее поиск по антителам и реагентам. «Умный автокомплит» предлагал завершение текущего слова в одно нажатие, опираясь на уже введённые слова, определённые правила сочетаемости и статистику запросов. Ближайший аналог из лингвистики — после ввода глагола с больше вероятностью идёет существительное, чем другой глагол.
Rauf Aliev
Search Analytics
https://hybrismart.com/2017/10/06/part2-sap-hybris-thinking-outside-the-box-part-2-of-4-video-russian-english-search-analytics/
Некоторые материалы представлены на блоге не в виде статей, а в виде видеороликов. Всего их там штук 40 наберется. К сожалению, такой формат пока ещё не прижился. Здесь я рассказываю про Search Analytics — механизм сбора и обработки статистики, имеющей отношение к действиям покупателей с вовлечением поиска по товарам. Я придумал этот механизм для большого продуктового магазина в Европе и перепроверил его ещё раз для той самой biotech-компании из предыдущего примера. Вкратце, идея сводится к тому, что действия покупателей могут много рассказать про то, как работает поиск, и где у него слабые места. Например, статистика показывает, что некоторые товары ищут часто, но кладут в корзину редко (высокая цена? Устаревшие модели?), а другие — кладут часто, но довольно плохо ищут (подсказки?), а за третьими готовы прокликивать несколько страниц результатов поиска (какие-то нерелевантные товары вылезают вперед?). В общем, это такой Google Analytics, но — для поиска.
Rauf Aliev
Multi-line Search
https://hybrismart.com/2017/04/07/multi-line-product-search-for-bulk-orders/
Иметь свой блог удобно тем, что туда можно выгружать идеи и эксперименты и высвобождать мозги под что-нибудь более актуальное и новое. В этой статье я описал концепцию «многострочного поиска» для B2B-сайтов, которая когда-то в свое время была актуальна.
Идея в том, что часто удобно искать на сайте, скопипастив целую группу артикулов или названий товаров в поле для поиска, чем делать это одной строчкой за раз.
Rauf Aliev
Product Image Visual Search
https://hybrismart.com/2018/08/26/product-image-visual-search-in-sap-commerce-cloud-hybris-commerce/
В этой статье я описываю поиск похожих товаров — по цвету или форме. Это довольно «классическая» тема, но на практике, по непонятной мне причине, редко реализуемая. Я сделал прототип и описал матчасть. Практически все статьи подобного характера сопровождаются видео, как работает прототип с SAP Commerce, и эта — не исключение. Для интеграции с Apache Solr я использовал Lire (https://github.com/dermotte/lire).
Rauf Aliev
More Like This In SOLR
https://hybrismart.com/2017/02/05/more-like-this-in-hybris-solr-search/
Если в прошлой статье мы искали похожие товары по цвету и размеру, то тут показываются похожие по чёрт знает чему. Система рассчитывает и упорядочивает товары по принципу похожести индексируемого контента — описаний товаров, названий, характеристик. Тем больше сходства, тем ближе товары будут в таких «кластерах» друг к другу. Для пользователя же мы можем вывести товары, находящиеся поблизости в таком «пространстве похожестей», которые, скорее всего, окажутся товарами-заменителями.
Rauf Aliev
Concept Aware Search: Automatic Facet Discovery
https://hybrismart.com/2017/06/25/concept-aware-search-automatic-facet-discovery-in-hybris/
Здесь я тоже описываю интересный эксперимент и прототип: система выставляет фасеты самостоятельно, основываясь на введённом поисковом запросе. Например, если вы ищите что-то запросом «красное платьишко 39 размера», то вам надо показывать не товары, у которых все эти слова есть в описании или названии, а товары, отфильтрованные по тегу «красный», «платье» и «размер 39». Для русского языка понадобятся ещё танцы с бубнами, а с английским все работает уже сейчас. Внутри есть демка, показывающая разницу между тем, как работает дефолтный поиск и он же, но с моей логикой поверх. Называется, почувствуйте разницу. Однако, нужно отметить, что такой подход всё ещё блещет сайд-эффектами, и нужно очень тщательно настраивать систему, чтобы она удовлетворяла всех или почти всех.
Rauf Aliev
Enhanced Multi-Word Synonyms and Phrase Search
https://hybrismart.com/2017/08/09/enhanced-multi-word-synonyms-and-phrase-search/
Есть известная проблема в SOLR (и это не только с хайбрисом), что многословные синонимы работают очень криво. С однословными ещё кое-как работает, но тоже со своими сложностями. В блоге описано решение, позволяющее обойти эти проблемы и сделать поиск умнее. При отстутствии однозначности система перебирает разные варианты замен и выбирает наиболее «выигрышную» замену.
На блоге есть ещё пара десятков статей на тему поиска. А на этом прекрасном месте тема поиска уступает теме расчёта акций и скидок и прочей лояльности.
АКЦИИ ПО ПРАВИЛАМ
«Купи два пуховика по цене трёх и получи один в подарок!». Что только маркетологи не придумают, чтобы программисты не скучали. Делаешь полгода совершенный «движок» акций, который умеет вообще всё и ещё немножко, и тут приходит менеджер с очередной идеей, из-за которой нужно переписывать половину! В хайбрисе тоже было два поколения таких «движков». Разработчики решили не изобретать велосипед и использовали JBoss Drools, довольно мощную систему управления бизнес-правилами, которая интегрирована в хайбрис для темы акционных механик, темы узкой, но разнообразной в своей узости.
Если в двух словах, то Drools — это среда выполнения бизнес-правил. Механизм обрабатывает так называемые «факты» — входные данные, — и выдаёт результат в результате обработки правил и фактов. В хайбрисе для Drools сделали интерактивный редактор правил «в терминах e-commerce», а также представили API для расширения.
Rauf Aliev
‘Could Have Fired’
https://hybrismart.com/2016/06/04/hybris-6-could-have-fired-messages-poc/
Если какое-то правило срабатывает, то накладывается скидка. Правила применяются к корзине. Мой эксперимент, в описанной статье, показывает, что правила могут применяться не к корзине, но к комбинации корзины и текущего товара. То есть ты ещё на кнопку «купить» не нажал, а уже видишь, какие райские сады и великолепные дворцы сейчас будут добавлены в корзину как подарок. Предполагается, что это должно сделать пользователя счастливее и увеличить продажи.
Rauf Aliev
Distributed promotion calculation in the cluster. Promo as a service
https://hybrismart.com/2016/07/05/distributed-promotion-calculation-cluster-promo-as-a-service/
Так вот, этот самый Drools интегрирован в платформу. А она — монолит. Монолит — это когда весь код растёт из одного места. И вот когда пользователь тыкает иконочку на шопинг карт, на сервере миллионы маленьких гномиков начинают создавать контекст для Drools, потом заполнять его «фактами», куда входят товары, категории, свойства пользователя и всякое ещё разное, от чего может зависеть акция. И происходит это на той ноде в кластере, куда принесло пользователя лоад-балансером. И если там вдруг в это время перебои с процессорными ресурсами или памятью, то пользователь будет страдать. Затем, пользователю вручают скидку или подарок, а сервер всё это хозяйство подчищает. До следующего раза, когда оно опять начнёт создаваться. В статье я описываю свой эксперимент в вынесении Drools в отдельный кластер и вынос этапа этого конфигурирования Drools из запроса. Кроме того, что это повышает производительность, это ещё позволяет делать довольно сложные акции, где участвует, например, миллионы «фактов».
Rauf Aliev
Using hybris rule engine for product recommendations
https://hybrismart.com/2016/08/09/using-hybris-rule-engine-for-product-recommendations/
В этом примере я показываю, как можно устроить рекомендательную систему на основе правил, используя уже готовый механизм на основе Drools. В моём прототипе рекомендательной системы рекомендации можно создавать интерактивно, конструируя логику связей аксессуаров с товарами или похожих товаров между собой. Например, анчоусы к пиву, ментос — к коле, берёзовый сок — к буратино, мыло — к верёвке, розетку и фай-фай роутер — к чаю и кофе. Рекомендации — это всегда хорошо, когда они со смыслом.
Rauf Aliev
Complex Realtime Event Processing with Drools Fusion
https://hybrismart.com/2016/10/17/complex-realtime-event-processing-with-drools-fusion-integrating-with-hybris/
Ну раз я уже построил этот кластер, я не мог его не домучить и построить на его основе штуку, которая обрабатывала бы события на лету, накладывая на них на том же лету правила. Мне удалось разобраться и подключить Drools Fusion + Drools Server последней версии к hybris. Эта штука правильно называется Complex Event Processing. Смысл в том, что если у вас есть поток каких-либо данных для обработки в реальном времени, Drools Fusion позволяет делать это быстро и гибко. Например, в случае e-commerceтаких данных много. Самые простые — это клики и переходы.
Я записал и публикнул демку, из которой понятно, как это работает. Логи выгружаются куда-то в хранилище, а оттуда попадают в drools fusion для обработки. На языке drools пишутся правила, которые вытягивают из логов какие-то новые знания. В моей демке это просто идентификация фотограф/не фотограф по характеру посещённых страниц и кликов. Например, пользователь уже просмотрел тучу моделей и мы делаем вывод, что он любит моделей. Или долго водит мышью по фотографии любимого штатива, из чего мы делаем вывод, что он любит не только модели, но и штативы. Результат правил возвращается обратно в хайбрис и как-нибудь там может использоваться. Баннер показать или цены чуть-чуть понизить на фототехнику.
Основная особенность всего этого, что обрабатывается поток событий в реальном времени. В моём примере — это нахождение как минимум пяти страниц одной тематической группы за последние 30 секунд для одного пользователя.
Второй важный пункт в том, что такая система очень масштабируема, ведь каждый сервер работает независимо. В то время ещё была жива встроенной в хайбрис персонализация. Её потом заменили на платный сервис. Она была жутко тормозная, и поэтому её мало кто использовал. Здесь же нагружаются серверы, софт которых не стоит ничего: он бесплатен. А в хайбрис потом пропихиваются уже готовые решения, которые нужно там тупо визуализировать.
Rauf Aliev
Reactive Rule-based Dynamic Forms
https://hybrismart.com/2018/01/04/reactive-rule-based-dynamic-forms-in-hybris-using-drools-7/
Drools также можно использовать для автоматизации сложных форм, и в своём эксперименте я показываю, как это может быть достигнуто. В этом эксперименте я демонстрирую как можно реализовать многостраничную, многоэтапную форму, у которой состав и конфигурация полей и шагов меняется в зависимости от введённой информации в другие поля. Такая логика довольно сложно реализуется в стандартных подходах к формам, и её программирование значительно облегчается, когда для описания правил используется Drools.
Чтобы плавно закончить тему с Drools и начать тему про всякое разное в e-commerce и хайбрисе, я представлю ещё подробный обзор акционных механик.
Rauf Aliev
Promotion Mechanics and Their Implementation in Hybris
https://hybrismart.com/2017/04/30/promotion-mechanics-and-their-implementation-in-hybris-6-x/
Замечаете, почти все темы не совсем и про хайбрис. Там везде он каким-то боком есть, но в целом e-commerce— это не вещь в себе. Всё связано со всем.
Конечно, на сайте есть ещё десятки материалов, которые довольно сложно понять тем, кто вообще не разбирался с хайбрисом.
Rauf Aliev
Merging Carts When A Customer Logs In: Problems, Solutions, and Recommendations
https://hybrismart.com/2019/02/24/merging-carts-when-a-customer-logs-in-problems-solutions-and-recommendations/
Например, в этой статье я описываю проблему объединения корзин после аутентификации. Это когда вы положили пятьдесят разных уточек в корзину, а потом авторизовались, а магазин туда подмешал выбранных с прошлого раза 50 зайчиков. Есть разные стратегии по тому, как разделять уточек и зайчиков в этом примере, и я их разбираю. Стратегии разбираю, не зайчиков.
Rauf Aliev
Hybris Impex Preprocessor
https://hybrismart.com/2018/05/27/hybris-impex-preprocessor-impex/
Эта вот тема, наверное, полезна лишь для разбирающихся в хайбрисе. Привожу ее тут как пример статьи «для своих». Их меньшинство, но они занимают свою важную нишу.
В хайбрисе есть специальный формат для импорта и экспорта данных. Называется Impex и со стороны очень похож на обычный CSV. Там есть очень простой язык разметки, показывающий, что вот этот блок ниже — товары, а вот тот блок ещё — категории к ним. В целом, довольно удобно, но не тогда, когда у тебя двадцать почти одинаковых сайтов на разных языках, и каждый раз, когда добавляешь какой-нибудь интерфейсный компонент на все двадцать, нужно без ошибок скопипастить одно и то же двадцать раз и потом это поддерживать. У меня был такой проект, и я предложил решение с макросами на JSON, которые помогали создать импекс из импекса-с-макросами. Там не обычные макросы, а с циклами и параметрами.
Если вы ничего не поняли, то это нормально. У нас ещё и шутки есть, которые никто вне тусовки не понимает. Хотя они все грустные, не будем про это. У нас же серьёзная статья.
Rauf Aliev
Payments: A look Inside the Black Box
https://hybrismart.com/2019/09/08/payments-a-look-inside-the-black-box/
Я когда-то работал руководителем разработки в Chronopay, и с тех пор тема электронных платежей висела надо мной тёмной тяжёлой тучей, пока я её не приземлил вот в эту статью и освободил мозги под новые челенджи. Там собрано самое необходимое для понимания вопросов интеграции с платёжными шлюзами и сервисами, бест практисес и типичные недосмотры, которых нужно избегать (или использовать, если вы злой покупатель).
Rauf Aliev
Server-side PDF document generation
https://hybrismart.com/2017/06/15/pdf-and-sap-hybris/
А ещё раньше, во времена зачёток и пейджеров, я работал дизайнером и верстальщиком (впрочем, в коломенском педуниверситете и пейджинговой компании Мобилтелеком я тоже работал. Да, я уже старый). Не тем верстальщиком, который HTML, а тем, который про книжки и журналы, а иногда даже православные газеты, телепрограммы и ноты. И, конечно, я не мог обойти стороной тему Postscript и PDF, которые пугают очень многих из-за туманных и плохо документированных внутренностей. В статье я показываю, что не так страшен чёрт, и делаю обзор инструментов под генерацию PDF.
Rauf Aliev
Authentication with Hardware Security Keys via Webauthn in SAP Commerce Cloud
https://hybrismart.com/2019/05/23/authentication-with-hardware-security-keys-via-webauthn-in-sap-commerce-cloud/
В этой статье я описываю прототип авторизации по USB-ключикам, и последние (на момент статьи) продвиги в этом направлении на рынке, типа беспарольной авторизации, поддерживаемой браузерами. Удалось интегрировать с хайбрисом Yubikey, описываю как оно получалось (и получилось).
Rauf Aliev
Geofencing: Custom Shipping Zones
https://hybrismart.com/2016/10/19/geofencing-in-hybris-custom-shipping-zones/
Очередной эксперимент: использование размеченных областей на карте Google для различных целей в e-commerce: поиска оптимального склада, поиска доступных магазинов для самовывоза или лучшего доставщика, а может и самого факта возможности продать товар или услугу покупателю из этой зоны.
Работает это так: покупатель вводит адрес, а система его определяет в одну или несколько крупных зон. Различные компоненты системы зависят уже от этих крупных зон, а не от мелких компонентов адреса, таких как почтовый индекс.
Заодно разобрался с разработкой на Google AppEngine. Дело в том, что определение многоугольника (зоны), в который входит точка на карте (где покупатель), для ситуации «много зон сложной формы» потенциально может быть довольно «тяжелой» вычислительной задачей. И если есть возможность, ее лучше сразу делать на кластере, который может легко масштабироваться, а лучше еще и сам. И вот этот кейс отличный для Google AppEngine, где задействован Google DataStore для хранения параметров многоугольников, и Google Memcache для хранения кэша.
Rauf Aliev
Page Fragment Caching: Custom, with Varnish, Nginx, Memcached
https://hybrismart.com/2016/07/24/page-fragment-caching-for-hybris/
https://hybrismart.com/2016/07/27/varnish/
https://hybrismart.com/2016/07/30/hybris-page-fragment-caching-with-nginx-and-memcached/
В этих статьях я рассказываю про механизм умного кэширования частей страниц. Каждая из частей имеет составной ключ, говорящий о том, от чего она зависит. Например, для кэширования списка адресов доставки интернет-магазина (пример у меня есть в видео) составным ключом может быть идентификатор пользователя — тогда для разных пользователей будут использоваться разные кэши.
Механизм особо эффективен, если «тяжелый» функционал (в смысле использования памяти и процессора) вынесен из контроллеров страниц в компоненты, т.к. для кэширования контроллеров страниц описанная методика подходит не идеально.
Чтобы лучше понять идею, проще всего посмотреть на скриншоты шаблонов в середине статьи.
Rauf Aliev
Best Practices: Migrating Content To Hybris
https://hybrismart.com/2017/01/10/best-practices-migrating-content-to-hybris/
Migrating Data with Pentaho ETL (Kettle)
https://hybrismart.com/2017/01/15/migrating-data-with-pentaho-etl-kettle/
А тут много про миграцию данных: best practices, инструменты, архитектура моей самописной тулзы. Хоть тут и есть в названии слово «Hybris», но как и в прочих, эта статья не на 100% про хайбрис, не очень «гиковая», так что, надеюсь, будет понятна и интересна всем, кто знает, что такое «миграция данных в веб-проекте».
* * *
Также на блоге есть довольно подробно разобранные темы с чат-ботами (Facebook, Skype, кастом), вынесение хранения сессий за пределы хайбриса в отдельный сервис, разбор всего, что касается аутентификации и логин-форм, разбор особенностей реализации тревел-сервисов (заказ билетов, отели) — часть 1 и часть 2, а также собранные best practices по интеграции по product availability с внешними системами, и какие сложности этот процесс имеет, и много-много чего еще.
Какие еще темы вы бы хотели видеть разобранными подобным образом? По концепции блога они должны иметь отношение к ecommerce. Буду рад любым отзывам и предложениям.