Commit 8251ad0
fix(rust): gate trigram-based shared-dict merging on corpus size (#1505)
Fixes shared dictionary grouping inflation on datasets with many
high-cardinality string columns (e.g. OSM hiking relations with `@id`,
`relation_ids`, `relation_lengths_m`).
`max(exact, trigram) > 0.075` merges columns that share character
trigrams (digits, URLs) despite sharing zero actual values. Through
transitive union-find closure, nearly all string columns get merged into
one giant dictionary.
**Fix**:
After forming groups with the existing aggressive heuristic, each group
whose combined corpus exceeds 100 KB is checked for actual cross-column
value deduplication. Groups with <5% dedup are dissolved.
Tjios means that existing OMT groupings are preserved, since they have
genuine value overlap (multilingual name translations share most values
across `name`, `name:latin`, `name_de`, `name_en`, `name_int`):
| Tile | Before | After | Change |
|---|---:|---:|---:|
| OMT z14 (23K features) | 378.1 KB | 378.1 KB | **+0.0%** |
| OMT z7 | 178.1 KB | 178.1 KB | **+0.0%** |
| Hiking z0 | 180.0 KB | 155.5 KB | **−13.6%** |
| Hiking z2 | 678.9 KB | 555.2 KB | **−18.2%** |
| Hiking z4 (86K features) | 5.2 MB | 4.4 MB | **−14.8%** |
| Hiking z6 | 3.4 MB | 2.9 MB | **−16.0%** |
| Hiking z8 | 543.0 KB | 445.7 KB | **−17.9%** |
| Hiking z10 | 173.6 KB | 138.6 KB | **−20.2%** |
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>1 parent 13cf6cd commit 8251ad0
2 files changed
Lines changed: 112 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
31 | 38 | | |
32 | 39 | | |
33 | 40 | | |
| 41 | + | |
| 42 | + | |
34 | 43 | | |
35 | 44 | | |
36 | 45 | | |
| |||
61 | 70 | | |
62 | 71 | | |
63 | 72 | | |
64 | | - | |
| 73 | + | |
65 | 74 | | |
66 | 75 | | |
67 | 76 | | |
| |||
72 | 81 | | |
73 | 82 | | |
74 | 83 | | |
| 84 | + | |
| 85 | + | |
75 | 86 | | |
76 | 87 | | |
77 | 88 | | |
| |||
85 | 96 | | |
86 | 97 | | |
87 | 98 | | |
| 99 | + | |
88 | 100 | | |
89 | 101 | | |
90 | 102 | | |
| |||
120 | 132 | | |
121 | 133 | | |
122 | 134 | | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
123 | 163 | | |
124 | 164 | | |
125 | 165 | | |
| |||
146 | 186 | | |
147 | 187 | | |
148 | 188 | | |
149 | | - | |
| 189 | + | |
150 | 190 | | |
151 | 191 | | |
152 | 192 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1295 | 1295 | | |
1296 | 1296 | | |
1297 | 1297 | | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
| 1333 | + | |
| 1334 | + | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
| 1351 | + | |
| 1352 | + | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
| 1356 | + | |
| 1357 | + | |
| 1358 | + | |
| 1359 | + | |
| 1360 | + | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
1298 | 1368 | | |
1299 | 1369 | | |
1300 | 1370 | | |
| |||
0 commit comments