Как стать автором
Обновить

Производительность базового поиска в Ozon как культурный феномен

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров24K
Всего голосов 68: ↑63 и ↓5+71
Комментарии87

Комментарии 87

Пожалуйста :)

Пользуясь случаем, хочу задать вопрос о поиске на "озоне".

Например я хочу найти микроконтроллер CH32V307 либо отладочную плату с ним. Ввожу в поиск "CH32V307". Результат на скриншоте:

Поиск на "озоне". Первая страница результатов поиска.
Поиск на "озоне". Первая страница результатов поиска.

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

Поясните пожалуйста, по каким параметрам приведённые на скриншоте пылесборники и масляный фильтр оказались более релевантными с точки зрения озоновского поиска? В их названиях нет искомого обозначения.

стоит предположить очевидный вариант - "деньги не пахнут", а содержимое нерелевантной выдачи проплачено продавцами )

(списывают у старшего брата, в общем https://habr.com/ru/companies/first/articles/776960/)

Это не объясняет почему в выдаче одни фильтры.

Мы облажались с текстовым анализатором, будем исправлять.

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

'''CH32V307'''

это значит "искать точное совпадение, проплаченый мусор из промо не напихивать, если ничего не найдено - показать что ничего не найдено".

Такие штуки это всегда риски создать привычки у пользователей и потом огребать на тему "а почему секретный метод, о котором я вычитал в телеграм-канале больше не работает" :)

У вас хотя бы нашлось. А я как-то искал по критериям: hdd 2,5" sata3 1тб. Мне пару штук надо было. Хотел посмотреть, что есть, по каким ценам. Я даже даже фильтры всякие включил. Где-то через час мне надоело вылавливать карточки нужных товаров среди ssd разных объёмов, всяческих внешних дисков, разноцветных корпусов, переходников, кабелей и чёрт знает какого мусора (как у вас). Пошёл на сайт оранжевого магазина, за 10 минут всё посмотрел, купил нужное. Летом дело было.

Пошёл на сайт оранжевого магазина

у них иерархический каталог есть. это большое преимущество.

"Почти 4000 инженеров" не могут сделать подсветку поисковой строки в результатах поиска? Серьёзно?

Мне ниже ответили, что это трейд офф, чтобы поиск работал лучше, надо чтобы он работал хуже)

Согласен с вами, логика поиска на озоне с точки зрения пользователя на уровне студентов 2го курса, я даже не стал всю статью читать, хотя много где наблюдается скатывания сервисов ниже плинтуса и озон естественно не исключение. Выезжают только за счёт свисто@@@делок.

Почти по анекдоту: Озон умеет искать очень быстро, но такая фигня получается ;)

я так вчера искал свичи для клавиатуры. в выдаче 1 лот со свичами и "миллион" с клавиатурами. Причем я пробовал писать и что-то вроде cherry mx brown - все равно клавиатуры (причем в описании лота поди может и не быть информации о том какие именно свичи используются в этой конкретной клавиатуре, а зачастую там и вовсе red). Так что как это должно работать - хз.

Однако в Java пока нет стабильного способа читать данные произвольного
размера напрямую из памяти, поэтому эта реализация использует несколько
ByteBuffer-ов.

Года 3 назад удобно работал в Java программе с непрерывным регионом памяти на сотни гигабайт через VirtualMemory обертку из QuestDb. mmap и никаких ByteBuffer.

В этом проекте много полезных примитивов для джавистов было написано с нуля. Проект не использует внешние зависимсти.

А там так же через Unsafe всё делается. У нас по сути так же.

Для тех кто не в ozon и решает подобные задачи эти классы могут пригодиться. Проект с десятками тысяч звезд на гитхабе, входящий в Y Combinator и существующий почти десятилетие дает надежду что эти классы будут поддерживаться и переноситься на новые стандарты платформы с выходом каждой новой версии JDK.

А явные проблемы какие то были? Нечто подобное скоро потребуется.

Круто, работал у вас на складе, было интересно.

Попробуйте пройти квест "найти fdm филамент с 3х-цвентым равным прцтком".

Лично я - не смог ((((

Прямо с опечатками вводить?

Поиск озона стал отстойным. Вводишь условно айфон 13,тебе выдает вообще все айфоны, всех годов.

он тебе выдаёт карточку поиска "айфон 13" в котором собраны масляные фильтры, наволочки и сидушки для унитазов.
Неоднократно замечал.

Я заметил, что на озоне проще найти товаре, через я маркет :D

Ладно если только настоящие айфоны. На запрос "samsung s23" строки примерно с четвертой начинаются подделки за шесть-восемь тысяч.

Почему Java 20, а не 21? Все-таки 21 - LTS. Потому что Java 21 слишком свежая и не успели перейти?

Когда переходили на 20, 21-ой еще не было в GA. Сейчас переходим на 21. Дело в том, что как раз с 20 версии уже нормально заработала panama, которую мы используем (проект ANN поиска упоминается в статье).

Культурный феномен — это антифрод Озона, который заблокировал мне учётку на ровном месте.

О, не я один такой! Мне, правда, учётку не блокировали, но антифрод несколько раз срабатывал, я пожал плечами и ушёл искать нужную мне камеру для тюбинга на другие маркетплейсы

Мне полностью заблокировали учётку, при попытке входа с использованием номера телефона появляется сообщение в духе "Мы не можем отправить смс на этот номер", предлагается обратиться в службу поддержки.

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

В последний раз я обратился к их сервису по работе с персональными данными (как я понял) с просьбой удалить аккаунт. В удалении было отказано со ссылкой на то, что аккаунт был заблокирован по причинам, которые они в соответствии с их правилами, которые я принял при регистрации, могут не указывать, а потому аккаунт нельзя удалить. Именно поэтому я решил, что это антифрод.

Меня больше всего подбешивает, что когда открываешь сайт на телефоне, тыкаешь в поиск, набираешь текст, а он либо часть символов не пропечатывает, либо оказывается надо ещё раз на поиск нажать чтобы он заработал и появились подсказки. Такое ощущение, что страница не успевает полностью прогрузится. И этим страдают многие сайты

Похоже так и задумано. Нажимаешь на поле поиска, вводишь текст, нажимаешь поиск и перекидывает на страницу поиска, где поле уже пустое и снова нужно вводить запрос.

В olx такая херня подбешивает. Что поиск при вводе глючный, что подгружаемость сделана так что когда ты хочешь быстро в нужные кнопки сайта попасть, оно устроено так что в этот момент догрузит остальные потроха и намеренно сдвинет экран и попадёшь ты не туда куда тебе нужно, а им

Я уже смирился с таким поведением. Если после перехода на строку поиска не загрузилась история поиска, то нажимаю еще раз в поле ввода.

Больше раздражает, что приходится ждать некоторое время прежде чем можно листать фотографии товара. А еще бесит когда жму на ссылку, но прямо перед нажатием на странице подгружается новый элемент, на который в итоге нажимает палец.

Будьте культурным человеком, купите свечу в виде члена!

Культурный феномен

Все претензии к обществу.

кстати что за дискриминация, где свечи (и мыло, см выше по треду) в виде вагин ?

inb4 "вопрос к продавцам, нет спроса - нет предложения".

Фаллические символы были всегда популярнее во все времена.

С удовольствием прочитаю статью о поиске, когда будет рабочий поиск. Хотя бы кавычки включите - уже хорошо.

Если стоят столь строгие требования к производительности, то почему Java, а не что-то более для этого подходящее (C++, Rust)? В этих языках нету многих упомянутых тут проблем Java, вроде излишних аллокаций, виртуальности вызовов там где не надо, затрат на дженерики и т. д.
Или были куда более веские причины использовать Java, скажем, доступность конкретных библиотек под неё или наличие знаний в команде?

В статье Сергея написано детально о причинах, но всё таки на C++ надежный проект поддерживать сложно, а растоманов у нас тогда почти не было. Плюс можно было переиспользовать куски кода эластика скажем касательно мультиматч запросов, что бы переход для клиентов сделать плавнее. Сегодня, наверное, если начинать новый проект действительно может быть лучше взять tantivy и делать вокруг него на Rust.

Lucene как библиотека все еще очень хороший выбор. Написать свой поисковый движок с ноля возможно, но это примерно 1-2 года для команды из людей, которые уже точно знают что надо делать (уже работали с поиском, разбираются в SoTA поисковых технологиях и так далее).

У нас есть немалая экспертиза в java/JVM, но тогда, не было супер экспертизы в поиске, поэтому для нас Apache Lucene был вполне логичен.

НЛО прилетело и опубликовало эту надпись здесь

Есть замеры tantivy vs lucene и tantivy быстрее. Поэтому разумно ожидать что поиск построенный поверх tantivy можно сделать более быстрый чем поверх lucene. Так что здесь логичное предположение, что можно на Rust быстрее сделать в теории.

А Вы сами свом поиском пробовали пользоватся?

Задаешь любое - скажем "графин стеклянный 2 литра".. Нашло. Меняешь сортировку - и всё. Там всякая бяка

Тот самый случай, когда маркетологи правят балом, какие бы крутые решения программисты не реализовывали, все это ломается о правило - мы завалим вас мусором чтобы бизнес платил бабки за то чтобы быть сверху мусорной ямы.

Читаешь статью - красота! Продвинутые технологии, умные программисты, интересные технические решения!

Заходишь на сайт, пишешь некий набор параметров - и получаешь в результатах поиска пачку ну вот СААВСЭМ нерелеватного мусора :(((

И где все эти продвинутые технологии и технические решения?

Запрос айфон 13

Сортировка самый дешевый

Сортировка самый дорогой

Сортировка высокий рейтинг

Ни в одной сортировке нет 13го) каеф. Причем, если искать через гугл на озоне, то потом все норм сортирует. Может вам все вот, что вы наделали удалить и прост гуглу платить?

Если вы зажмете конкретную модель слева, то результат будет именно тот, которвый вам нужен.

Разнообразие и сужение выдачи, это всегде некоторый trade off. Так не только у нас.

Мы даем вам инструмент суждения выдачи через фильтры, если он вам нужен.

я бы понял сужение выдачи только для 13х айфонов, но не для всех айфонов вообще. Я же ввел цифру 13 для чего? чтобы мне выдавало все остальные с 7 по 15? Если я ввожу просто айфон показывайте все вариации, но если есть конкретика зачем мне все остальное? Для айфонов у вас есть подфильтр, но я уверен, что есть много товаров для которых подфильтров нет и как мне сужать вашу выдачу для них?

Трейд Оф хДДДД

Разнообразие и сужение выдачи - это всегде некоторый trade off

Дык какой тут компромис-то? Если человек написал 10 разных слов в поиске - считаем, что пользователь лучше Вас знает, что ему надо.

Вначале выдайте только те результаты, которые содержат ВСЕ запрошенные слова...А только потом, по мере необходимости - смягчайте максимально жёсткий изначальный поиск...
Или хотя бы - кавычки научите понимать Вашу вооон такую умную систему...

PS. Или хотя бы признайтесь самому себе, что работа создателей поиска в Озоне - это нечто вроде работы напёрсточника в 90х. Оно, конечно, денежно - но строится сугубо на разводке клиетов. Без всякого trade-off

Если у других так же это не значит, что это хорошо. Это все равно, что вы в ресторане закажете шампанское, а вам скажут "может по пивку, а?"

Ну вы не передергивайте, да. Это довольно сомнительный прием в дискуссии. Я привел здесь примеры из других поисков, чтобы показать тот факт, что это довольно распрастенная практика. И вовсе не согласен с тем, что она плохая, даже если вы счиаете иначе :-)

Зачем мне, примеры других поисков, если мы обсуждаем ваш, если вы прочитаете комментарии, то увидите, что многим поиск не нравится, а не только мне. Поиск по факту не ищет то, что нужно и разбавляет его какими-то левыми вещами. Сделайте голосовалку, нравится людям ваш поиск или нет.

Для того чтобы учтонить запрос, есть прекрасный инструмент фильтрации. Вы почему-то игнорируете его, при этом написали уже множество комментариев (совершенно не по теме статьи, кстати) о том, что вы считаете всех вокруг дураками, потому что они по вашему, выдают "не те результаты".

То что вы считаете другие модели iphone "левыми вещами" при запросе "iphone 13" с сортировкой по цене, это ваше право, но это не значит, что выше мнение является здесь экспертным или даже может быть обощено каким-то образом на большую группу людей.

Ну так сделайте голосовалку, где спросите устраивает ли людей ваш поиск. Вы ее никогда не сделаете, потому что знаете ответ. Тут уже были разрабы с he али, которые тоже говорили, что поиск у них норм.

Кстати да. Меня попросили написать на мыло, что мне кажется неудачным. Я написал 14 пунктов с картинками и подробными описаниями. Через пару писем они просто слились. Больше года прошло, стало ещё хуже.

А почему вы считаете НЕ левым iPhone 14 в выдаче по запросу "iPhone 13"?

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

А я уже давно не пользуюсь поиском ни на озоне, ни на вб, ни на яндексе, потому что их выдача - абсолютно нерелевантный мусор.
И большинство моих знакомых и коллег (в том числе женщин которые постоянно чем то закупаются) делают так же.
Потому что "ой там поиск такой дурацкий, никогда ничего не находит!".

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

Возможно, вам больше подходит более строгая модель "каталога", вместо поиска. То есть вы попадаете в каталог с определенными товарами в конкретной категории и потом просто уточняете запрос, пока вам не будет достаточно.

У всех маркетплейсов каталоги + фильтры плюс/минус есть.

Поиск это немного другая штука. Понятие релевантности не так просто оценивается разными людьми, как кажется, на первый взгляд. Безусловно, бывают явные промахи (типа показали стул, а искали тарелку), и с ними идет постоянная борьба.

А в говно лучше не наступать ;-)

Ваши каталоги имеют мало релевантных фильтров. Мне обычно наплевать (или я просто не знаю) производителя, и совершенно точно наплевать на продавца. Мне товар купить, а не шашечки.

Но когда приходится листать десяток страниц, пока найдёшь хотя бы одно предложение (третья строка? ха! Восьмая страница! Поищите "цепь для пилы 8 дюймов" - вся выдача забита от произвольного размера цепей до цепей 3/8")

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

Я не могу показать на сервисе, поскольку все сервисы подсовывают по принципу "покажем побольше, авось прокатит".
Но я могу сказать, что если у меня в запросе аккумуляторная цепная пила 8", мне точно не надо показывать бензиновые пилы на 14"
А если у меня в запросе цепь для пилы 8 дюймов , я ещё могу понять логику показа цепей с шагом 3/8 (поэтому крайне хотелось бы указывать, чего НЕ должно быть в ответе), но зачем мне цепи на 6" и на 14"?

Ну вот

Яндекс

Али

Озон

И вроде бы не совсем плохо, но посортируем по цене

0!

Во, попалось совсем прекрасное. Вводите поисковую строку "горелка газовая инфракрасная". Затем результат ограничиваете именно до туристических горелок, вуаля, в выдаче исключительно дачные обогреватели!

Аналогично, за всё время так и не заказал ничего в Ozon'е - по моим запросам получаю много лишнего мусора, нет возможности (либо я не нашёл) убрать из выдачи товары с доставкой из-за рубежа (много китайского мусора в выдаче, вообще, Ozon очень похож на филиал Aliexpress, с таким же кривым описанием товаров)
Сайт настолько неудобный, что пользоваться им нет желания, проще что-то купить на AliExpress или Авито.

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

Ага. Поэтому я мнгого-много лет хожу в один не-сетевой супермаркет в Питере (и немного переплачиваю им), в котором за эти много-много лет ничего не поменялось в выкладке товара :)

Культурный феномен это то, что поиск не работает. От слова вообще

В запросе: Велосипед городской. В фильтре - велосипеды городские

Показывает что? показывает горные велосипеды

Подскажите, это какая-то внеземная технология сравнить заголовок товара и поисковый запрос?

Ссылка на урл поиска

https://www.ozon.ru/category/gorodskie-velosipedy-31946/?category_was_predicted=true&deny_category_prediction=true&from_global=true&text=Велосипед+мужской+гордоской

Самый смак, что по ссылке, он включает категории автоматом и правильно показывает городские хД, но если её сбросить(категорию) , то да будут все велосипеды. И топик стартер утверждает, что это вершина поиска, выдавать, то что не в запросе)

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

Вот да. Неужели вы серьезно каким-то образом верите, что ваш поиск хоть как-то полезен людям? Вы лучше напишите, как анализируете изменение продаж, меняя разный мусор в выдаче по конкретному запросу. Хоть честно будет.

И с фильтрами, с фильтрами бела полная. Я уж не говорю о том, что тонны нерелевантного, но вот дико бесит, когда ищешь что-то и ставишь "за час", он находит, ты кладешь в корзину, а на этапе оформления оказывается, что до первого диапазона этих "за час" тебе надо будет прождать еще часа четыре. При том, что приложение знает и адрес доставки и часовой пояс и все все все.

Особенно актуальна беда, когда ищешь что-то ночью в мск. Тебе огромными буквами товары "за час", в корзину кладешь, в оформление переходишь, а там начинаются веселые пляски и чудеса.

Впрочем и не только ночью.

Сколько раз так меня этот сервис подводил и было тупо выгоднее сходить за полчаса ножками в ближайший тц и купить.

Ибо когда ты тыкаешь в товар обозначенный "за час" , а на этапе оформления обнаруживается, что ждать надо будет минимум часа три+, то теряется всякий смысл. При том, что приложение уже заранее знает куда я буду заказывать... Бред.

Согласен с другими комментаторами по поводу того, что с поиском проблемы - и такое не только с озоном, с яндекс.маркетом, после того как он стал маркетплейсом, тоже такие проблемы появились. Как бы ты не уточнял запрос через поисковую строку - в выдаче всегда мусор, поэтому без фильтров или категорий искать ничего невозможно, поэтому я этими двумя маркетплейсами никогда не пользуюсь.

При этом, как бы везде не хаяли вайлдберис, но у него поиск работает намного лучше - в выдаче находится +- то, что я искал

Интересная статья, но, когда мне рассказывают о куче невероятных технологий, команде мастеров и профессионалов своего дела. Рассказывают, как все восхитительно сделано и работает, а я смотрю, там ничерта не работает или работает не так, то напрашивается вывод: вероятно оно и должно вот так работать и все то, что я вижу - именно так и задумано.

А раз задумано не очень удобно для пользователя, значит вся эта "кривизна" решает какие-то проблемы бизнеса. Хочется в это верить, но как пользователь - я негодую. Если я ищу смарт-часы, то выдайте мне смарт-часы. Не ремешки, корпуса, стекла, пленки, а именно смарт-часы.

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

Самый дорогой товар должен стоять на самых удобных и бросающихся в глаза полках. Дешевое покупатель и так найдет при желании. Поиск Ozon работает так же. Даже в рамках одной позиции товара.

Торговый зал должен быть спланирован таким образом, чтобы за самыми востребованными вещами нужно было идти дальше всего. Покупатель ненароком может набрать лишнего пока идет в дальний конец магазина за хлебом. И на Ozon примерно так же. Смарт-часы, по запросу, находятся где-то на середине страницы. Пока до них долистаешь - увидишь ремешки к ним, защитные стекла и т.д. Я ловил себя на мысли, что хочу вон тот ораньжевый ремешок т.к часы с стандартным смотрятся хуже.

Это то, что в глаза бросается, но можно поискать еще аналогии. Временами подбешивает все это, но я уже наловчился?

А в целом очень шравится сканер штрихкода в поиске. Если товар есть - его сразу выдает. Да, не самую выгодную карточку, но зато работает шустро.

Я думаю, скорее они настолько упоролись в оптимизацию и писательство велосипедов, что глючит базовая логика, а признаться в этом самим себе - значит, сказать: "у нас тут десятки разработчиков год занимались какой-то фигней, откатывайте все" - стыдно.

Пипец, и они еще посчитали возможным написать статью о производительности того ...., чего нет. Особенно если менять тип сортировки.

Разработка своего кодека

У lucene раньше был docvalues-на-массиве, потом он стал LegacyNumericDocValues, потом его совсем выпилили. Это не то что вам нужно? Оно и сейчас применимо, endiannes надо только поменять.

А если не секрет, какая у вас стратегия шардирования? Из каких соображений выбираете количество документов в шарде?

Да, это одна из идей. В sorted numeric dv существенная часть работы с тз процессорного времени это декомпрессия. Для часто читаемых данных размен памяти на ядра вроде классический трейдофф, если вы CPU bound.

Наконец-то вопросы вошли по теме!)

А можно просто втупую искать по названиям товара именно то, что ввел пользователь? Или просто втупую слать запрос в Эластик, чтобы он опять же получал то, что ищет?

А то пока от Озона такое впечатление, что туда понабрали сотни и тысячи разработчиков (зачем столько? Это маркетплейс, а не Гугл), которые занимаются оптимизацией и велосипедостроением как карго-культом - лишь бы что-то сделать и показать. Но при этом базовый юзер экспериенс далек от идеального.

Мы лет 5 назад в своем проекте сразу lucene стали использовать. Сильная штукенция. Но сложная))) фаззи поиск по винегрету "английские и русские" слова ломает головной мозг.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий