// V1.S1526-2 · 2026-09-15 — FIX
V1.S1526-2
Same 1,000,011 entities, same modest device. Search now hits a single search_text GIN
(no OR name) and graph/overview serves a warm cache. Bars are median of 3 live API runs.
Lower is faster — compare to v1.S1526.
1,000,011
Entities
33,343
People
5,002
Relationships
// LATENCY — AFTER FIX old v1.S1526 in grey
list page limit 50
36.5 ms
cursor page (next)
31.7 ms
search "Alavi"
95.5 ms
search "Orion"
125.8 ms
search "V-000"
334.2 ms
tag filter "poi"
33.2 ms
tag filter "travel"
29.9 ms
type "person"
27.1 ms
type "vehicle"
22.3 ms
hasGeo filter
35.2 ms
get by id
16.6 ms
graph overview
38.7 ms
Median of 3 runs. Live via app API on 1M live rows. Postgres 16 + pg_trgm + hash-partitioned entities (32 shards).
v1.S1526: V-000 740.0 ms → 334.2 ms (−55%)
·
graph 1187.1 ms → 38.7 ms (−97%)
·
Orion 159.1 → 125.8 ms (−21%)
←
Back
entities.rs:build_filters now uses search_text ILIKE only (dropped OR name ILIKE that defeated the GIN), rich search_text (name + aliases + tags + workplace/nationality/extraNotes lowercased), new entities_name_trgm + rel_org_deleted + entities_org_object_type_alive indexes, warm graph_type_stats/edges cache on boot + transactionally in /graph/overview and do_rebuild (sum(d) GROUP BY id fix, classification = ANY(allowed) instead of CASE rank). Backfill touches rows where search_text = lower(name).