{
  "experiment": "text-indexing-retrieval-benchmark",
  "started_utc": "2026-10-28T13:18:14.236339+00:00",
  "finished_utc": "2026-10-28T13:18:42.034428+00:00",
  "host": "darkoza001",
  "python": "3.14.4 (main, Aug 20 2026, 10:41:58) [GCC 15.2.0]",
  "dataset": {
    "type": "deterministically generated synthetic technical documents",
    "user_data_used": false,
    "sizes": [
      2000,
      8000,
      20000
    ],
    "topics": 8,
    "approx_tokens_per_document": 60,
    "query_type": "two topic-specific signature terms with known synthetic labels"
  },
  "methods": {
    "set": "Python set posting lists plus per-document term-frequency dictionaries; set intersection",
    "array": "sorted document IDs and frequencies in compact unsigned-int arrays; two-pointer intersection",
    "build_repeats": 3,
    "query_repeats_per_topic": 10,
    "top_k": 10
  },
  "results": [
    {
      "documents": 2000,
      "index_type": "set",
      "build_repeats": 3,
      "median_build_seconds": 0.2671933669998907,
      "mean_build_seconds": 0.2721650756663318,
      "build_stdev_seconds": 0.008625599940315927,
      "median_peak_traced_mb": 10.318222045898438,
      "docs_indexed_per_second": 7485.215753880664,
      "median_query_ms": 0.3976064999733353,
      "p95_query_ms": 0.5357800000638235,
      "hit_at_10": 1.0,
      "unique_terms": 2087,
      "posting_entries": 85704
    },
    {
      "documents": 2000,
      "index_type": "array",
      "build_repeats": 3,
      "median_build_seconds": 0.218314143000498,
      "mean_build_seconds": 0.21820263466664377,
      "build_stdev_seconds": 0.0011834196571075064,
      "median_peak_traced_mb": 1.3110847473144531,
      "docs_indexed_per_second": 9161.110556155942,
      "median_query_ms": 0.18187749992648605,
      "p95_query_ms": 0.4296610004530521,
      "hit_at_10": 1.0,
      "unique_terms": 2087,
      "posting_entries": 85704
    },
    {
      "documents": 8000,
      "index_type": "set",
      "build_repeats": 3,
      "median_build_seconds": 1.0693564490002245,
      "mean_build_seconds": 1.0770415509999414,
      "build_stdev_seconds": 0.015857471099772463,
      "median_peak_traced_mb": 41.14193153381348,
      "docs_indexed_per_second": 7481.135039190585,
      "median_query_ms": 2.1995795004841057,
      "p95_query_ms": 2.4371649997192435,
      "hit_at_10": 1.0,
      "unique_terms": 8087,
      "posting_entries": 342690
    },
    {
      "documents": 8000,
      "index_type": "array",
      "build_repeats": 3,
      "median_build_seconds": 0.8707174239998494,
      "mean_build_seconds": 0.8673637383335517,
      "build_stdev_seconds": 0.007033697304006956,
      "median_peak_traced_mb": 5.162628173828125,
      "docs_indexed_per_second": 9187.825785373721,
      "median_query_ms": 0.7456470002580318,
      "p95_query_ms": 1.77870800052915,
      "hit_at_10": 1.0,
      "unique_terms": 8087,
      "posting_entries": 342690
    },
    {
      "documents": 20000,
      "index_type": "set",
      "build_repeats": 3,
      "median_build_seconds": 2.731798714999968,
      "mean_build_seconds": 2.7282780960000914,
      "build_stdev_seconds": 0.02887063472015874,
      "median_peak_traced_mb": 106.53375244140625,
      "docs_indexed_per_second": 7321.1836180251785,
      "median_query_ms": 5.9291640000083135,
      "p95_query_ms": 6.285241999648861,
      "hit_at_10": 1.0,
      "unique_terms": 20087,
      "posting_entries": 856214
    },
    {
      "documents": 20000,
      "index_type": "array",
      "build_repeats": 3,
      "median_build_seconds": 2.165561684999375,
      "mean_build_seconds": 2.1644491713335205,
      "build_stdev_seconds": 0.0035477865411167185,
      "median_peak_traced_mb": 12.813112258911133,
      "docs_indexed_per_second": 9235.479247041523,
      "median_query_ms": 1.8957459997182013,
      "p95_query_ms": 4.527551000137464,
      "hit_at_10": 1.0,
      "unique_terms": 20087,
      "posting_entries": 856214
    }
  ],
  "validation": {
    "2000": {
      "rankings_identical": true,
      "queries_checked": 8,
      "all_top10_relevant": true
    },
    "8000": {
      "rankings_identical": true,
      "queries_checked": 8,
      "all_top10_relevant": true
    },
    "20000": {
      "rankings_identical": true,
      "queries_checked": 8,
      "all_top10_relevant": true
    }
  },
  "limitations": [
    "Synthetic corpus and known-label queries test mechanics, not real-world search relevance.",
    "tracemalloc measures Python-traced allocations, not total resident memory.",
    "Only two index designs, three sizes and one host were tested.",
    "No scientific novelty or LLM reasoning claim follows from this benchmark."
  ]
}
