The old dragon.query grammar Ideagen relies on — proximity, stems, phrases, section-scope — passes through end-to-end on our own extraction off s3://sec4-parse-raw/. Boolean search on 758k paragraphs stays sub-second; semantic sits at ~120 ms warm. What follows is the pilot in numbers, then eight real queries.
The refresh timer's form set — 10-K, 10-Q, S-1, 424B4, 20-F — plus their /A amendments, S-11 variants, and a lone 10-KT transition report. 817 upserted, 52 no-sections (mostly shelf 10-Ks and empty micro-amendments), one transient Qdrant gRPC timeout that will retry next run.
| Form | Filings | Paragraphs | Avg chars | Share |
|---|---|---|---|---|
| S-1/A | 123 | 245,168 | 288 | |
| S-1 | 100 | 159,747 | 311 | |
| 424B4 | 61 | 124,013 | 314 | |
| 10-K | 156 | 86,048 | 334 | |
| 20-F | 33 | 62,940 | 243 | |
| 10-Q | 311 | 58,864 | 309 | |
| 10-K/A | 23 | 9,840 | 330 | |
| S-11 | 2 | 4,078 | 288 | |
| 20-F/A | 6 | 2,888 | 345 | |
| 10-Q/A | 19 | 2,776 | 275 | |
| S-11/A | 1 | 1,525 | 231 | |
| 10-KT | 1 | 268 | 242 |
Real client-shape queries against the 758k-paragraph corpus. Each card shows the query as sent, the postgres tsvector it's translated to (when different), applied filters, the top result, and end-to-end latency. Legacy wildcards (word*, word!), proximity (W/N, ADJ/N), phrases ("..."), boolean operators (AND/OR/NOT), and section-scope (/p, /s) are handled at query time.
Ideagen-style pledged-shares sweep — proximity on foreign-issuer 20-F Item 6
(pledge* W/20 share*) OR (pledge* W/20 equit*) OR (held* ADJ/10 brokerage*)
Pursuant to the spousal consent letter executed by the spouse of the shareholders of our VIEs, each of such spouse unconditionally and irrevocably agreed to the execution of exclus…
Natural-language semantic — going-concern language, scoped to 10-Q Part II Item 1A
substantial doubt about ability to continue operations
Substantial doubt about our ability to continue as a going concern has not been alleviated.
Boolean + Porter stem — cybersecurity incidents scoped to Item 1A
cyber:* & (breach | incident | ransomware)
The Fund and its service providers, as well as the Portfolio Entities and their service providers, are susceptible to operational and information security and related risks of cybe…
Quoted phrase + AND — proxy peer-group changes in 10-K
"peer group" AND (modified | updated)
No paragraphs matched in this month's corpus. Query surface still resolved in 149 ms — the tsvector index short-circuited on the phrase constraint before ranking cost anything.
Recent browse — no text query, show latest 10-Q MD&A paragraphs
query = None
This Quarterly Report on Form 10-Q, including the section Management's Discussion and Analysis of Financial Condition and Results of Operations, contains certain statements that a…
Hybrid — boolean + semantic merged via reciprocal-rank fusion
competitive pressure from artificial intelligence
The development and deployment of AI technologies are areas of intense competition, and our competitors or other third parties may develop or deploy AI capabilities more quickly or…
kitems_group(query, group_by, …filters…) hands back facet counts over the same filtered set search would return. Filer facets auto-attach the most-recent filer_name label so consumers don't need a second lookup.
Latencies measured against the live 758,155-paragraph corpus, warm process. Semantic includes E5-base-v2 inference for the query; hybrid runs both sides + reciprocal-rank-fusion merge.
| Mode | Backing | Representative query | Latency |
|---|---|---|---|
| boolean | postgres · tsvector + GIN + ts_rank_cd | cyber:* & (breach | attack | incident) | 559 ms |
| boolean | postgres · with kitem filter | cyber:* & breach | attack + item=1A | 252 ms |
| boolean | postgres · legacy dragon syntax | Ideagen pledge sweep (proximity) | 333 ms |
| semantic | Qdrant · E5-base-v2 cosine | going-concern natural language | 120 ms |
| semantic | Qdrant · with kitem filter | going-concern + kitem=II-1A | 118 ms |
| hybrid | both · reciprocal-rank fusion | competitive AI pressure | 339 ms |
| recent | postgres · ORDER BY filing_date DESC | latest 10-Q MD&A paragraphs | 159 ms |
| group | postgres · GROUP BY (any facet) | form distribution across corpus | 221 ms |
form + kitem; that's the “find X inside 8-K Item 5.02” job. We accept the same "II-1A" / "5.02" / ["5.02","2.06"] shape and route it through pg WHERE + Qdrant payload equally.W/N, ADJ/N, *, !, AND/OR/NOT, and "…" phrases don't need to be rewritten — translate_legacy_query() maps them into postgres tsvector at query time. /p (same-paragraph) is free at our row grain; /s is approximated as <3>.invest and investment collapse to the same 275 matches (vs regex substring at 416, which also catches investigate). Porter stemming via to_tsvector('english', text).KITEMS_INTEGRATION.md is delivered to the argos-mcp-server team — sections__kitems_search + sections__kitems_group follow the same wrapper pattern as sections__ipo_risk_factors and sections__filing_change_screen. Seven acceptance tests included; wrap-time round-trip should be same-day.text from Qdrant payload (read from pg), sub-sample, or shard. Decide after the full-year pilot review.ents/bent), multi-path facet unions, and legacy alerts. Real Ideagen traffic doesn't lean on any of them; can add when a case surfaces.