[{"data":1,"prerenderedAt":266},["ShallowReactive",2],{"post-016-matching-meaning-ru":3,"post-og-016-matching-meaning":145},{"id":4,"title":5,"bars":6,"blurb":7,"body":8,"color":6,"contacts":6,"date":129,"dateModified":6,"description":130,"extension":131,"featured":132,"groups":6,"kicker":133,"meta":134,"metrics":6,"n":135,"navigation":136,"openTabs":6,"path":137,"progress":6,"readTime":138,"reading":6,"role":6,"rules":6,"running":6,"seo":139,"ships":6,"slug":140,"stack":6,"started":6,"status":6,"stem":141,"streak":6,"tag":142,"tagColor":143,"tagline":6,"tasks":6,"timeline":6,"topics":6,"week":6,"year":6,"__hash__":144},"ru\u002Fwriting\u002F016-matching-meaning.md","Матчинг — это не поиск: от ключевых слов к смыслу",null,"почему маркетплейс вакансий выкинул матчинг по ключевым словам — и что оставил.",{"type":9,"value":10,"toc":116},"minimark",[11,15,19,24,27,30,40,48,53,56,63,67,74,77,81,84,87,91,94,98,101,104,111],[12,13,14],"p",{},"▸ кейс — № 016 · 13 июн '26 · 6 мин",[16,17,5],"h2",{"id":18},"матчинг-это-не-поиск-от-ключевых-слов-к-смыслу",[12,20,21],{},[22,23,7],"em",{},[25,26],"hr",{},[12,28,29],{},"matchpro — это маркетплейс вакансий, и он держится на одной упрямой мысли:",[31,32,33],"blockquote",{},[12,34,35,36,39],{},"«матчинг — это не поиск. поиск награждает за точность. матчинг награждает за ",[22,37,38],{},"интересную близость",".»",[12,41,42,43,47],{},"поисковик оценивают по точности — ты ввёл ",[44,45,46],"code",{},"postgres",", ты хочешь строки, где написано postgres. матчинг — игра наоборот. лучшая вакансия для человека — часто та, которую он никогда не вбил бы в поиск, а лучший кандидат на роль — часто тот, кто описал ту же работу другими словами. оптимизируй матчинг как поиск — получишь систему, которая уверенно и метко ошибается.",[49,50,52],"h3",{"id":51},"эра-ключевых-слов","эра ключевых слов",[12,54,55],{},"годами матчинг опирался на точные правила: совпадение ключевых слов и заголовков плюс горстка жёстких фильтров. это очевидная первая версия, и она даже не плоха — пока у всех общий словарь. в одной узкой области, на одном языке, люди сходятся на одних и тех же словах, и совпадение слов — приемлемый прокси для соответствия.",[12,57,58,59,62],{},"всё ломается, стоит выйти из этого мира. двое описывают одну и ту же работу разными словами — и не встречаются. сильный кандидат пишет прошлогоднюю должность. кто-то пишет вообще на другом языке. движок по ключевым словам видит не слабое совпадение — он видит ",[22,60,61],{},"никакого",". а костыль — таблица синонимов и алиасов, которую руками растишь под каждую область, — гниёт быстрее, чем успеваешь обновлять.",[49,64,66],{"id":65},"от-правил-к-смыслу","от правил к смыслу",[12,68,69,70,73],{},"переписывание свелось к одной идее: сравнивать профиль и вакансию по тому, что они ",[22,71,72],{},"значат",", а не по тому, какие слова у них случайно совпали. представь смысл каждой стороны — и пусть «близость по смыслу» находит то, что совпадению слов было не под силу. и вдруг «интересно близкие» совпадения — те, что рекрутер узнаёт мгновенно, а поиск прятал, — всплывают сами.",[12,75,76],{},"это та часть, что в демо выглядит магией, а в проде отрезвляет. отбор по смыслу щедрый; он находит много. именно поэтому он не может быть всей системой.",[49,78,80],{"id":79},"оставь-скучные-правила","оставь скучные правила",[12,82,83],{},"смысл находит кандидатов. но не ему решать, кто реально подходит. есть вещи без полутонов — жёсткое требование остаётся жёстким требованием, и «интересно близко» — неправильный ответ, когда человек просто не может занять роль. поэтому жёсткие ограничения остались — как ворота, через которые смысл-совпадения обязаны пройти.",[12,85,86],{},"урок, который я переучиваю снова и снова: яркий слой (выученное сходство) и скучный слой (явные правила) — не соперники. скучный не зря ест свой хлеб. выкинь его — и твой умный матчер уверенно предложит невозможное.",[49,88,90],{"id":89},"смысл-переносится","смысл переносится",[12,92,93],{},"тихий бонус: смысл не привязан к словарю, поэтому тот же подход выходит за пределы области и языка, в которых родился. профиль на одном языке матчится с вакансией на другом — без таблицы перевода под каждую пару. перестаёшь поддерживать хрупкие словари под каждую область и начинаешь доверять представлению, которое обобщает.",[49,95,97],{"id":96},"приватность-часть-матча","приватность — часть матча",[12,99,100],{},"ещё одно ограничение определило всё: людей матчат анонимно. система работает с профилями без личных данных, а кто ты такой — раскрывается только когда обе стороны согласны на разговор. это продуктовая позиция, но и инженерная — она решает, что матчеру вообще позволено видеть, и держит стимулы честными. матчишь по сути, потому что какое-то время суть — это всё, что есть.",[49,102,103],{"id":103},"итог",[12,105,106,107,110],{},"сожми всё переписывание в одну строку: ",[22,108,109],{},"матчь по смыслу, решай по правилам, раскрывай по согласию."," матчинг по смыслу собирает заголовки; но скучные ворота и позиция по приватности — вот что делает это пригодным к жизни. матчинг — это не поиск, и день, когда перестаёшь оптимизировать его как поиск, — это день, когда кажется, что система и правда понимает.",[12,112,113],{},[22,114,115],{},"matchpro.io — privacy-first маркетплейс вакансий. это подход, а не рецепт — самое интересное остаётся в репозитории.",{"title":117,"searchDepth":118,"depth":119,"links":120},"",2,3,[121],{"id":18,"depth":118,"text":5,"children":122},[123,124,125,126,127,128],{"id":51,"depth":119,"text":52},{"id":65,"depth":119,"text":66},{"id":79,"depth":119,"text":80},{"id":89,"depth":119,"text":90},{"id":96,"depth":119,"text":97},{"id":103,"depth":119,"text":103},"2026-06-13","кейс matchpro: почему матчинг ушёл от ключевых слов к смыслу — и что из «скучного» пришлось оставить.","md",false,"кейс",{},"016",true,"\u002Fwriting\u002F016-matching-meaning","6 мин",{"title":5,"description":130},"016-matching-meaning","writing\u002F016-matching-meaning",{"label":133,"color":143},"var(--red)","apZDumj79FWjAWv1cD5qdEzHTUCebO6ZB1MWxVTUnPo",{"id":146,"title":147,"bars":6,"blurb":148,"body":149,"color":6,"contacts":6,"date":129,"dateModified":6,"description":259,"extension":131,"featured":132,"groups":6,"kicker":260,"meta":261,"metrics":6,"n":135,"navigation":136,"openTabs":6,"path":137,"progress":6,"readTime":262,"reading":6,"role":6,"rules":6,"running":6,"seo":263,"ships":6,"slug":140,"stack":6,"started":6,"status":6,"stem":141,"streak":6,"tag":264,"tagColor":143,"tagline":6,"tasks":6,"timeline":6,"topics":6,"week":6,"year":6,"__hash__":265},"en\u002Fwriting\u002F016-matching-meaning.md","Matching is not search: from keywords to meaning","why a job marketplace threw out keyword matching — and what it kept.",{"type":9,"value":150,"toc":249},[151,154,157,161,163,166,175,181,185,188,195,199,206,209,213,216,219,223,226,230,233,237,244],[12,152,153],{},"▸ case study — № 016 · jun 13 '26 · 6 min",[16,155,147],{"id":156},"matching-is-not-search-from-keywords-to-meaning",[12,158,159],{},[22,160,148],{},[25,162],{},[12,164,165],{},"matchpro is a job marketplace, and it runs on one stubborn opinion:",[31,167,168],{},[12,169,170,171,174],{},"\"matching is not search. search rewards precision. matching rewards being ",[22,172,173],{},"interestingly close",".\"",[12,176,177,178,180],{},"a search engine is judged on exactness — you typed ",[44,179,46],{},", you want the rows that say postgres. matching is the opposite game. the best role for a person is often the one they'd never have typed into a search box, and the best candidate for a role is often the one who described the same work in different words. optimize matching like search and you get a system that's confidently, precisely wrong.",[49,182,184],{"id":183},"the-keyword-era","the keyword era",[12,186,187],{},"for years the matching leaned on exact rules: keyword and title overlap, plus a handful of hard filters. it's the obvious first version, and it isn't even bad — while everyone shares a vocabulary. in one tight field, in one language, people converge on the same words, and word-overlap is a decent proxy for fit.",[12,189,190,191,194],{},"it gets brittle the moment you leave that world. two people describe identical work in different terms and never meet. a strong candidate uses last year's job title. someone writes in another language entirely. the keyword engine doesn't see a weak match — it sees ",[22,192,193],{},"no"," match. and the fix — a growing table of synonyms and aliases, hand-fed per field — rots faster than you can maintain it.",[49,196,198],{"id":197},"from-rules-to-meaning","from rules to meaning",[12,200,201,202,205],{},"the rewrite was one idea: compare a profile and a role by what they ",[22,203,204],{},"mean",", not which words they happen to share. represent the meaning of each side, and let \"close in meaning\" do the recall that word-overlap couldn't. suddenly the interestingly-close matches — the ones a recruiter recognizes instantly but the search box hid — surface on their own.",[12,207,208],{},"this is the part that reads like magic in a demo and humbles you in production. meaning-based recall is generous; it finds a lot. which is exactly why it can't be the whole system.",[49,210,212],{"id":211},"keep-the-boring-rules","keep the boring rules",[12,214,215],{},"meaning finds candidates. it does not get to decide who actually qualifies. some things aren't fuzzy — a hard requirement is a hard requirement, and \"interestingly close\" is the wrong answer when someone simply can't take the role. so the hard constraints stayed, as a gate the meaning-matches have to pass through.",[12,217,218],{},"the lesson i keep relearning: the exciting layer (learned similarity) and the boring layer (explicit rules) aren't rivals. the boring one earns its keep. throw it away and your clever matcher confidently recommends impossible things.",[49,220,222],{"id":221},"meaning-travels","meaning travels",[12,224,225],{},"the quiet payoff: meaning isn't tied to a vocabulary, so the same approach reaches past the field and the language it was born in. a profile written in one language can match a role written in another, without a translation table per pair. you stop maintaining brittle per-field dictionaries and start trusting a representation that generalizes.",[49,227,229],{"id":228},"privacy-is-part-of-the-match","privacy is part of the match",[12,231,232],{},"one more constraint shaped all of it: people are matched while anonymous. the system works over profiles stripped of identity, and who-you-are is revealed only when both sides agree to talk. that's a product stance, but it's an engineering one too — it decides what the matcher is even allowed to see, and it keeps the incentives honest. you match on substance because, for a while, substance is all there is.",[49,234,236],{"id":235},"the-takeaway","the takeaway",[12,238,239,240,243],{},"compress the whole rewrite into one line: ",[22,241,242],{},"match by meaning, decide by rules, reveal by consent."," matching by meaning gets the headlines; the boring gate and the privacy stance are what make it usable. matching is not search — and the day you stop optimizing it like search is the day it starts to feel like it understands.",[12,245,246],{},[22,247,248],{},"matchpro.io is a privacy-first job marketplace. this is the approach, not the recipe — the interesting parts stay in the repo.",{"title":117,"searchDepth":118,"depth":119,"links":250},[251],{"id":156,"depth":118,"text":147,"children":252},[253,254,255,256,257,258],{"id":183,"depth":119,"text":184},{"id":197,"depth":119,"text":198},{"id":211,"depth":119,"text":212},{"id":221,"depth":119,"text":222},{"id":228,"depth":119,"text":229},{"id":235,"depth":119,"text":236},"matchpro case study: why the matching moved from keywords to meaning — and which 'boring' parts had to stay.","case study",{},"6 min",{"title":147,"description":259},{"label":260,"color":143},"j-r-kuyCke1c92YkTo6Maq4Sf3DWRzKvAzzhufUTU0Y",1781358082824]