Search v3 — browser test run
PR #3791 · mode lanes + keyword relevance ordering · ishwor/frt-2388-marketplace-ui-feedback
Driven against the dev server at localhost:3000/en/search/v3 on the live Typesense index (2,668,373 docs). 1440×900 unless noted. Dev overlays hidden by injected CSS. Console clean apart from one FontAwesome preload warning.
Mode lane behaviour
01Initial centered dock
open png
Pre-first-search. Mode defaults to Smart.
02Mode dropdown — Refine removed
open png
✓a11y tree lists exactly two options: Smart and Basic.
03Auto-detect → Basic
open png
Single word coffee.
✓pill reads ✦ Basic
04Auto-detect → Smart
open png
Descriptive phrase.
✓flips back to ✦ Smart
05Smart results — mode locked
open png
✓button[aria-label="Search mode"] → null
06New search split button
open png
Left half keeps the lane; dots pick one.
07Picked Basic → empty dock
open png
✓URL reset, input cleared, Basic carried over
08Manual pick beats auto-detect
open png
The modeTouched guard.
✓stays ✦ Basic
09Basic results
open png
✓?query=coffee&mode=basic, 2,043 results
10Mobile — label hidden
open png
✓label display:none; split button still tappable
11Example prompt overrides Basic
open png
Chip clicked while in Basic.
✓derives to ✦ Refine; no mode=basic in URL
12Follow-up refines
open png
✓same query, 2 filter chips added, 702 → 611
Mode label restyle — not a box, hover explains it
13Mode label — box removed
open png
Was a bordered, padded, rounded-full pill that read as a button.
✓border-width: 0px, transparent background, cursor: default; a11y tree reports generic, not button
14Hover explains Basic
open png
✓tooltip “Plain keyword match”; name Basic, hint via aria-describedby — announced once
15Keyboard focus explains Refine
open png
Opened by focus, not pointer.
✓tooltip “Narrow the current results” — reachable without a mouse
15 searches across different areas
How to read these: all 15 ran in Basic, the lane the new relevance ladder affects. “page-1 good extensions” counts how many of the top 10 sit in a weighted class (≥ 3) with the ladder versus Typesense's default ordering. The ladder improved 12/15 and regressed none — but two queries expose structural limits, flagged in amber.
Q01coffee — food & drink
open png
Top 5: coffeevilleusa.com coffee3.bg coffee4you.bg coffeeatwork.co.de coffee-at-work.co.de
✓tie-break order held (no class rises inside a text-match tier). 2,043 results · page-1 good extensions 6/10 vs 2/10 unsorted
Q02bank — finance
open png
Top 5: bankquant.com bankxpress.de bankbps.eu bank0mat.cc obank.de
✓tie-break order held (no class rises inside a text-match tier). 4,817 results · page-1 good extensions 9/10 vs 5/10 unsorted
Q03clinic — healthcare
open png
Top 5: clinic24.de clinicus.co.de clinictools.co.de clinicexpert.co.de declini.com
✓tie-break order held (no class rises inside a text-match tier). 2,315 results · page-1 good extensions 7/10 vs 4/10 unsorted
Q04immobilien — real estate (DE)
open png
Top 5: immobilien8.de immobilien6.de immobilienahlen.de immobilien-ahlen.de immobilien4you.co.de
✓tie-break order held (no class rises inside a text-match tier). 3,797 results · page-1 good extensions 9/10 vs 7/10 unsorted
Q05legal — professional services
open png
Top 5: legalup.co.de legal49.bg legal500.co.de legal365.bg legalq.de
✓tie-break order held (no class rises inside a text-match tier). 1,584 results · page-1 good extensions 6/10 vs 1/10 unsorted
Q06solar — energy
open png
Top 5: sol.ar solarjalousien.de solar-jalousien.de solarnipaneli.bg solarni-paneli.bg
✓tie-break order held (no class rises inside a text-match tier). 3,771 results · page-1 good extensions 5/10 vs 5/10 unsorted
Q07studio — creative
open png
Top 5: studio3.co.de studioz.co.de studioz.bg studio-z.bg studio-z.co.de
!Ladder can't help: the whole top text-match tier is bulk co.de/bg, so there is nothing better to promote into it. 13,536 results · page-1 good extensions 3/10 vs 3/10 unsorted
Q08fitness — sport & wellness
open png
Top 5: fitness666.com fitnesswahn.de fitness5gym.com fitness001.online fitnesse.de
✓tie-break order held (no class rises inside a text-match tier). 3,224 results · page-1 good extensions 9/10 vs 8/10 unsorted
Q09reisen — travel (DE)
open png
Top 5: reisen1.de reisen0815.de reisenbuchung.de reisen-buchung.de reisen-zu-superpreisen.de
✓tie-break order held (no class rises inside a text-match tier). 2,057 results · page-1 good extensions 10/10 vs 7/10 unsorted
Q10cloud — tech infra
open png
Top 5: cloud09-postfix-service-outlk-outbound.com cloud3.online cloudmma.tv cloud5.co.de cloudk.de
!Ladder works, result still poor: cloud09-postfix-service-outlk-outbound.com (38 chars) takes slot 1 because extension class ranks above length, beating cloud3.online. 4,119 results · page-1 good extensions 7/10 vs 3/10 unsorted
Q11academy — education
open png
Top 5: academyvn.com AcademyLanguage.com academyuniformsltd.com academyx.co.de facademy.de
✓tie-break order held (no class rises inside a text-match tier). 4,183 results · page-1 good extensions 9/10 vs 6/10 unsorted
Q12logistik — logistics (DE)
open png
Top 5: logistikgroup.de logistikverbund.de logistikspedition.de logistiktransport.de logistik-spedition.de
✓tie-break order held (no class rises inside a text-match tier). 379 results · page-1 good extensions 10/10 vs 10/10 unsorted
Q13fashion — retail
open png
Top 5: fashionwhizz.com fashion77bet.com fashion5.co.de fashionbyema.bg fashion1.de
✓tie-break order held (no class rises inside a text-match tier). 2,704 results · page-1 good extensions 8/10 vs 6/10 unsorted
Q14kanzlei — law (DE)
open png
Top 5: kanzlei-verl.de kanzlei-troisdorf.de kanzleisachs.co.de kanzlei-sachs.co.de kanzlei-ulrich-mann.co.de
✓tie-break order held (no class rises inside a text-match tier). 302 results · page-1 good extensions 7/10 vs 5/10 unsorted
Q15crypto — web3
open png
Top 5: crypto6.cc crypto9.life crypto030.online crypto888.club cryptom.net
✓tie-break order held (no class rises inside a text-match tier). 2,930 results · page-1 good extensions 6/10 vs 3/10 unsorted
15 phrases through the embedding path
What this tests: the Smart lane — each phrase is embedded via the app's own
EmbedSearchQuery BFF endpoint (256-dim), then run as the exact hybrid query production uses
(k=100, alpha=1.0, distance_threshold=0.5, no sort_by). Multi-word only; most phrases share no
literal token with a good result. 0 embed failures, 0 empty result sets, 12/15 fully semantic page 1.
| # | phrase | found | embed | vec distance | page-1 composition |
| 1 | cozy neighbourhood coffee roastery | 289 | 1644ms | 0.36–0.4184 | all 24/24 vector-matched |
| 2 | trustworthy private wealth advisor | 71 | 1049ms | 0.397–0.4392 | all 24/24 vector-matched |
| 3 | modern dental practice for families | 1,063 | 239ms | 0.3626–0.4074 | all 24/24 vector-matched |
| 4 | makler für wohnungen in münchen | 1,055 | 224ms | 0.2912–0.3204 | all 24/24 vector-matched |
| 5 | boutique law firm for startups | 2,093 | 165ms | 0.4614–0.4924 | 14 vector then 10 keyword-only backfill (e.g. boudoirboutique.de spoiledconsignmentboutique.com woll-boutique-lilienthal.de) |
| 6 | rooftop photovoltaic installation service | 138 | 180ms | 0.3502–0.419 | all 24/24 vector-matched |
| 7 | minimal photography studio brand | 202 | 173ms | 0.3043–0.3444 | all 24/24 vector-matched |
| 8 | personal training and strength coaching | 1,689 | 158ms | 0.2988–0.3847 | all 24/24 vector-matched |
| 9 | last minute flight deals to asia | 3,926 | 144ms | 0.4223–0.4877 | 14 vector then 10 keyword-only backfill (e.g. last30geng45.cc treeserviceglastonbury.com vastelasten.nl) |
| 10 | managed kubernetes hosting platform | 211 | 158ms | 0.3581–0.4205 | all 24/24 vector-matched |
| 11 | online courses for young children | 59,165 | 206ms | 0.3989–0.4587 | all 24/24 vector-matched |
| 12 | same day parcel delivery across europe | 834 | 154ms | 0.3383–0.4223 | all 24/24 vector-matched |
| 13 | sustainable womens clothing label | 265 | 152ms | 0.3862–0.4377 | all 24/24 vector-matched |
| 14 | handcrafted furniture from local wood | 56 | 164ms | 0.3987–0.4531 | all 24/24 vector-matched |
| 15 | self custody bitcoin wallet app | 1,391 | 141ms | 0.4716–0.4934 | 2 vector then 22 keyword-only backfill (e.g. selflove.co.de screenself.me self.ac) |
P1cozy neighbourhood coffee roastery
open png
Top 6: cafe-buch.de readbrew.com busybrew.com kaffeeröstung.de northernbrew.com cafecorner.de
✓289 results, all 24 on page 1 vector-matched. kaffeeröstung.de and cafe-buch.de share no token with the phrase — matched by meaning, across languages.
P2makler für wohnungen in münchen
open png
Top 6: muenchenmietwohnung.de wohnung-muenchen.de muenchenmietwohnungen.de wohnung-in-muenchen.de makler-muenchen.de muenchner-makler.de
✓1,055 results, fully vector-matched. German phrase, umlaut folded (münchen → muenchen); every hit on-intent.
P3self custody bitcoin wallet app — worst dilution
open png
Top 8: notyourkeysnotyourcoins.de satoshiwallet.de then selflove.co.de screenself.me self.ac selfiebardfw.com self-care.co.de selfmania-beratungundagentur.de
!Only 2 of 24 hits cleared the 0.5 distance threshold. Both are excellent. The other 22 are keyword-only backfill on the token “self”, all tied at rank_fusion_score 0 — irrelevant to the intent.
P4last minute flight deals to asia — strong head
open png
Top 6: flug-lastminute.de flyasiana.de lastminude.de asiaholidays.de asiatickets.de lastminutewelt.de
✓3,926 results; positions 1–13 are genuinely on-intent semantic matches.
P5…and its junk tail
open png
Positions 16–18: last30geng45.cc treeserviceglastonbury.com vastelasten.nl
!Where the vector arm stops (14 hits), infix keyword matching backfills: “last” inside glastonbury and vastelasten. Same page, same query.
P6managed kubernetes hosting platform
open png
Top 6: metahost.de projecthosting.de cloudhostingservice.de dynastack.com hovernode.com cloudyne.com
✓211 results, fully vector-matched. “kubernetes” appears in no hit — dynastack.com / hovernode.com come from the concept, not the string.
P7handcrafted furniture from local wood
open png
Top 6: kunstvollholz.de handbemalte-moebel.de holzunikate.de möbelwerk.de holzmoebelwerk.de die-moebel-werkstatt.de
✓An English phrase returning German domains with zero shared tokens (Holz = wood, Möbel = furniture). The clearest evidence the embedding path is doing the work.