Repository navigation
Find two-character Han words inside filenames - #85
Closed
MaxTheHaters wants to merge 2 commits into
Closed
MaxTheHaters wants to merge 2 commits into
MaxTheHaters wants to merge 2 commits into
Conversation
AmirHossein-84
added a commit
to AmirHossein-84/DigUp
that referenced
this pull request
Oct 18, 2026
… localization - SQLite & Search Layer (PRs ARahim3#16, ARahim3#38, ARahim3#82, ARahim3#85, ARahim3#94, ARahim3#111): * StatementCache with sqlite3_reset statement recycling and reentrant transactions * PRAGMA mmap_size = 1GB, synchronous = NORMAL, cache_size = -64000 * Zero-copy row.copyBlob direct vector loading into searcher matrix halves * Unicode NFC normalization for cross-platform and CJK/accented file paths * Chunked IN queries with UNION ALL to eliminate N+1 roundtrips * CJK Han character detection, Han text budgeting, and Han-aware snippet generation * SIMD8<Float> acceleration in Math+Portable.swift without heap allocations * Float16Shim for Intel Mac x86_64 IEEE 754 binary16 compatibility - Crawler, Rules, Path Normalization & Extractors (PRs ARahim3#33, ARahim3#42, ARahim3#56, ARahim3#60, ARahim3#79, ARahim3#80, ARahim3#86, ARahim3#88, ARahim3#91, ARahim3#101, ARahim3#107, ARahim3#109, Issues ARahim3#67, ARahim3#97, ARahim3#105, ARahim3#127): * Fix Windows path slash/drive normalization in DirectoryWalk preventing 0-file crawl * Fix case-insensitive folder matching on Windows in FolderSelection * Fix Crawler to never treat user-selected search roots (e.g. ~) as project roots * Exclude secrets/keys (.env*, .pem, .kdbx, SSH keys, passwd) in Rules * Honor standard CACHEDIR.TAG 43-byte signature when crawling * Skip build/intermediate directories (.venv, target, .build, .next, dist, bin, obj) * Drop FileProvider download status lookups for 10-50x faster cloud folder crawls * OfficeText extractor for .xlsx, .pptx, .ods, .odp XML documents * Headless LibreOffice .doc extractor on Linux and local Notion SQLite workspace extractor * Safe typed CGPDFDictionaryGetString for PDF metadata preventing crashes * Preserve OCR keywords on image-only PDFs * Outlook PST reader utility crate in pst/ - Indexing Pipeline & Runtime (PRs ARahim3#49, ARahim3#53, ARahim3#62, ARahim3#64, ARahim3#71, ARahim3#72, ARahim3#114, Issue ARahim3#3): * Batched document text embeddings (up to 16 docs per pass) * Cumulative IndexProgress tracking across multi-pass indexing * DocumentCache for extracted chunks to prevent redundant file disk reads * Linux URLSession SIGABRT fix in FileFetcher * ImageLoader parallel prefetching and batched image embeddings * Apple Neural Engine CoreML video frame encoding support * Scoped incremental subtree sync when changed paths are known * Autoreleasepool wrapping in background worker extraction to eliminate memory leaks - Daemon, Lifecycle & Policies (PRs ARahim3#24, ARahim3#27, ARahim3#31, ARahim3#36, ARahim3#51, ARahim3#82, Issues ARahim3#22, ARahim3#68): * HelperRestartPolicy for clean stop/resume transitions * Backlog starvation recovery and --resume-pending in IndexService * Configurable indexing hours window policy * Opt-in Low Power Mode indexing to protect laptop thermals and battery * Win32 OpenProcess(SYNCHRONIZE) parent monitor to prevent zombie helpers on Windows * Correct 0-hit search behavior when all search roots are removed - UI, Cross-Platform Shell, Localization & Build (PRs ARahim3#15, ARahim3#20, ARahim3#37, ARahim3#39, ARahim3#58, ARahim3#65, ARahim3#74, ARahim3#81, ARahim3#84, ARahim3#112): * DigUpLocalization framework with en, zh-Hans, zh-Hant string catalogs * AppSearch engine and launcher for macOS App and Tauri desktop shells * KeyCommands and QuickLookController shared handling * Preserved search field text during IME composition * Search panel fade transitions and @observable code editor selection * Hardened build scripts with pinned SHA-256 vendor checksum verification
Owner
|
Thanks @MaxTheHaters, the problem is real (I said as much in #4) and your eval shows it well. I'm going to fix it in the tokenizer rather than with a name scan: FTS5's trigram tokenizer, or an ICU one, so Chinese, Japanese and Thai match inside names and inside documents alike, measured with a Chinese eval. That's a one-time schema change, which is why I'd rather not add a second path first. Closing the PR; your fixture generator and queries will be useful when I get there. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Scope discussion: #137. This PR remains a draft pending maintainer agreement on the direction.
FTS5 treats an unspaced Han filename as one token, so
輔導can miss學生情緒輔導紀錄.pdf. This adds literal basename lookup for queries containing at least two consecutive Han characters, using the existing name rows without reindexing.NFKC normalization, mixed case/numbers/extensions, file-kind filters and live rename/delete handling are covered. Literal filename hits point to the name rather than a semantic page. Latin-only queries and code identifier lookup keep their existing rules. This PR contains no interface-localization changes and is independent of #34.
I saw the request for maintainer agreement before implementation in CONTRIBUTING. This draft presents a reproducible fix and evaluation evidence for discussion; it is not a request to bypass that review.
Evidence
Before: name-only evaluation found the expected file first for 4 of 12 queries.
After: the same index finds it first for all 12; no embedding/model fallback is needed.
swift test: 101 passed (95 DigUpKit, 6 LlamaRuntime, including actual model reference vectors). Nine added tests cover internal/two-character lookup, typing/settled results, exact/semantic ranking, duplicate prevention, all terms, kind filters, rename/delete, compatibility/case normalization, code isolation, and an exact name after 1,100 partial names.輔導median 15.18 → 59.02 ms (p95 19.48 → 63.12);情緒輔導14.70 → 57.25 ms; Latinannual39.91 → 39.24 ms. Times include process startup and opening the same index; the extra work returns filename hits that were previously absent.docs/han-filename-search.md,scripts/testbed/make_han_filenames.pyandevals/han-filenames.json.Independent regression update (2026-10-20)
swift test --jobs 1 --filter HanFilenameTestswith an isolated Xcode-build-system scratch directory: 10 tests passed. Earlier full-suite/evaluation/performance figures above are historical v0.6.1 evidence, not rerun measurements for this test-only update.Merge Danger
Door: two-way
No schema, vector version, model, or file-content changes. Existing indexes remain readable by v0.6.1.
Blast Radius: search
Han queries with literal basename matches deliberately rank those above content-only matches. Extra filename verification costs about 44 ms in the measured 20,000-name case. Chinese full-text tokenization, Traditional/Simplified conversion and one-character substring queries are outside this change.