# Lokální trigramové indexy Cursor urychlují regex-hledání v velkých repozitářích
V Cursoru zavádějí lokální indexy pro regex-hledání přímo v IDE. To řeší problém pomalého skenování velkých monorep, kde klasický ripgrep tráví 15+ sekund na volání, zatímco AI-agent generuje desítky takových požadavků.
Technologie je založena na trigramovém inverzním indexu z roku 1993. Text se rozkládá na všechny 3-znakové sekvence (trigramy), které slouží jako klíče ve slovníku. Každému klíči odpovídá seznam souborů obsahujících tuto sekvenci. Regex-dotaz se dekomponuje do sady trigramů, posting lists se protínají pro výběr kandidátů. Dále se grep aplikuje pouze na deset souborů místo tisíců.
Sparse n-grams pro přesné scopování
N atop základního indexu jsou přidány sparse n-gramy. Délka každého n-gramu se počítá deterministicky: prostřednictvím vah pár znaků na základě crc32 nebo frekvenční tabulky sestavené z terabajtů open-source kódu.
Při indexování se generují všechny možné n-gramy, při hledání minimální pokrývající množina. To snižuje počet lookupů a zvyšuje přesnost filtrování.
// Příklad dekompozice regex do n-gramů
regex: \w+@\w+\.com
n-grams: ['@', 'w+', '.c', 'com', ...] // sparse pokrytí
candidates = intersect(postings(ngrams))
Lokální úložiště a vazba na commit
Index je uložen lokálně na stroji uživatele ve dvou mmap-souborech. Důvody:
- AI-agent stejně čte soubory lokálně pro finální kontrolu.
- Síťové roundtripy ničí zisk rychlosti.
Index je vázán na konkrétní git-commit. Nezakomittované změny se aplikují navrch bez přestavby.
- Výhody mmap: nulový overhead na načtení, rychlá navigace v posting lists.
- Aktualizace: spouští se na git pull/push nebo ruční rebuild.
- Velikost: úměrná codebase, pro 10M LoC ~500MB.
Srovnání výkonu
| Přístup | Čas na požadavek (10k souborů) | Kandidáti pro grep |
|--------|--------------------------------|---------------------|
| ripgrep | 15–20 s | 10k |
| Cursor index | 50–200 ms | 10–50 |
V reálných scénářích s 100+ požadavky od agenta dosahuje celkové zrychlení 100x.
Trigramy zajišťují úplnost (recall=1 pro přesné podřetězce), sparse n-gramy přidávají přesnost bez falešných poplachů.
Co je důležité
- Trigramový index snižuje kandidáty z tisíců na desítky souborů.
- Sparse n-gramy minimalizují lookupy prostřednictvím minimální pokrývající množiny.
- Lokální mmap-úložiště vylučuje síťové zpoždění.
- Vazba na git-commit s overlayem nezakomittovaných změn.
- Zrychlení regex-hledání 100x pro AI-agenty ve velkých monorep.
— Editorial Team
Zatím žádné komentáře.