Search - query parser: phrases, prefix*, -exclude, OR, from:, subject:, group:, after:/before: date bounds - meta_fts index over subject + from_addr (npm run index:meta) - drop the FTS->messages join from counts (11s -> ~25ms for "unix"); group scope seeks by rowid range instead of joining - highlighted snippets, relevance/newest/oldest sort, timing, clear errors UI - group links with @, spaces, commas no longer 404 (decode route params) - home: hierarchy overview, largest/all views, name filter, sortable columns - group: oldest/newest toggle, scoped search, windowed pager + jump-to-page - message: quote-depth tinting, dimmed signatures, clickable URLs, author/thread links, index link returns to the right page - decode RFC 2047 encoded subjects/authors - fixed table layout (no column overflow), 14px text, mobile layout - keyboard: j/k next/prev, u up, / search; help, 404, error, loading pages
Showing the changes to README.md (1 of 19 files). Show all
Unified · Split
| @@ -37,6 +37,9 @@ npm run import /path/to/usenet/archive · 36 unmodified lines | ||
| 37 | 37 | # Re-split concatenated blobs (if importing raw Google Groups data) |
| 38 | 38 | npx tsx scripts/resplit.ts |
| 39 | 39 | |
| 40 | +# Build the subject/author index (after any import; ~25s, safe to re-run) | |
| 41 | +npm run index:meta | |
| 42 | + | |
| 40 | 43 | # Run dev server |
| 41 | 44 | npm run dev |
| 42 | 45 | |
| @@ -44,6 +47,12 @@ npm run dev · 1 unmodified line | ||
| 44 | 47 | npm run build && npm start |
| 45 | 48 | ``` |
| 46 | 49 | |
| 50 | +## Search syntax | |
| 51 | + | |
| 52 | +`word`, `"exact phrase"`, `prefix*`, `-exclude`, `a OR b`, `from:pike`, `subject:minix`, | |
| 53 | +`group:comp.os.plan9`, `after:1990`, `before:1992-06`. Sort by best match, newest or oldest. | |
| 54 | +Keyboard: `j`/`k` next/prev, `u` up, `/` search. See `/help`. | |
| 55 | + | |
| 47 | 56 | ## Schema |
| 48 | 57 | |
| 49 | 58 | ```sql |
| @@ -66,6 +75,7 @@ CREATE TABLE messages ( · 16 unmodified lines | ||
| 66 | 75 | ); |
| 67 | 76 | |
| 68 | 77 | CREATE VIRTUAL TABLE messages_fts USING fts5(body, content='messages', content_rowid='id'); |
| 78 | +CREATE VIRTUAL TABLE meta_fts USING fts5(subject, from_addr, content='messages', content_rowid='id'); | |
| 69 | 79 | ``` |
| 70 | 80 | |
| 71 | 81 | ## License |