q   cases WHOLE PARTS  NONE stemmed py!=js
Q1      8     7     1     0       0      0
Q2     11     2     7     2       0      0
Q3      5     1     4     0       0      0
Q4     12     3     8     1       0      0
Q5      6     4     0     2       0      0
Q6      6     2     4     0       0      0
  Q1 WHOLE 'release-notes-2'                                <- 'release-notes-2'
  Q1 WHOLE 'PROJ-ALPHA-releases'                            <- 'PROJ-ALPHA-releases'
  Q1 PARTS 'PROJ-ALPHA-releases'                            <- 'PROJ-ALPHA-release'
  Q1 WHOLE 'status-codes'                                   <- 'status-codes'
  Q1 WHOLE 'DAIRY-2'                                        <- 'DAIRY-2'
  Q1 WHOLE 'KFS-2014'                                       <- 'KFS-2014'
  Q1 WHOLE 'QCL-OPS-DOCK-03'                                <- 'QCL-OPS-DOCK-03'
  Q1 WHOLE 'user_settings'                                  <- 'user_settings'
  Q2 WHOLE 'RF-118'                                         <- 'RF-118'
  Q2 WHOLE 'RF-118'                                         <- 'rf-118'
  Q2 PARTS 'RF-118'                                         <- 'RF 118'
  Q2 NONE  'RF-118'                                         <- 'rf118'
  Q2 PARTS 'RF-118'                                         <- 'RF–118'
  Q2 PARTS 'RF-118'                                         <- 'RF—118'
  Q2 PARTS 'RF-118'                                         <- 'RF‐118'
  Q2 PARTS 'RF-118'                                         <- 'RF−118'
  Q2 PARTS 'RF-118'                                         <- 'RF_118'
  Q2 PARTS 'RF–118'                                         <- 'RF-118'
  Q2 NONE  'RF118'                                          <- 'RF-118'
  Q3 WHOLE 'ADR-0004'                                       <- 'ADR-0004'
  Q3 PARTS 'ADR-0004'                                       <- 'ADR-4'
  Q3 PARTS 'ADR-4'                                          <- 'ADR-0004'
  Q3 PARTS 'ADR-0004'                                       <- 'ADR 4'
  Q3 PARTS 'QCL-OPS-DOCK-03'                                <- 'QCL-OPS-DOCK-3'
  Q4 PARTS 'JIRA:PROJ-1'                                    <- 'JIRA:PROJ-1'
  Q4 WHOLE 'JIRA:PROJ-1'                                    <- 'PROJ-1'
  Q4 PARTS '#1234'                                          <- '#1234'
  Q4 PARTS 'ops@example'                                    <- 'ops@example'
  Q4 PARTS 'C++'                                            <- 'C++'
  Q4 PARTS 'v2.3.1+build.5'                                 <- 'v2.3.1+build.5'
  Q4 PARTS '~/.fux'                                         <- '~/.fux'
  Q4 PARTS 'run(fast)'                                      <- 'run(fast)'
  Q4 WHOLE 'v2.3.1-rc.1'                                    <- 'v2.3.1-rc.1'
  Q4 PARTS 'v2.3.1-rc.1'                                    <- '2.3.1-rc.1'
  Q4 NONE  'v2.3.1'                                         <- '2.3.1'
  Q4 WHOLE 'v2.3.1'                                         <- 'v2.3.1'
  Q5 WHOLE 'd3139fdb8e4a2c1f0b9a7e6d5c4b3a2918f7e6d5'       <- 'd3139fdb8e4a2c1f0b9a7e6d5c4b3a2918f7e6d5'
  Q5 NONE  'd3139fdb8e4a2c1f0b9a7e6d5c4b3a2918f7e6d5'       <- 'd3139fdb'
  Q5 NONE  'd3139fdb8e4a2c1f0b9a7e6d5c4b3a2918f7e6d5'       <- 'd3139fd'
  Q5 WHOLE '550e8400-e29b-41d4-a716-446655440000'           <- '550e8400-e29b-41d4-a716-446655440000'
  Q5 WHOLE '550e8400-e29b-41d4-a716-446655440000'           <- '550E8400-E29B-41D4-A716-446655440000'
  Q5 WHOLE '550e8400-e29b-41d4-a716-446655440000'           <- '550e8400'
  Q6 WHOLE 'src/fux/query/bm25f.py'                         <- 'src/fux/query/bm25f.py'
  Q6 PARTS 'src/fux/query/bm25f.py'                         <- 'bm25f.py'
  Q6 PARTS 'src/fux/query/bm25f.py'                         <- 'query/bm25f.py'
  Q6 WHOLE 'src/fux/query/bm25f.py'                         <- 'bm25f'
  Q6 PARTS 'https://example.com/wiki/RF-118?rev=2'          <- 'https://example.com/wiki/RF-118?rev=2'
  Q6 PARTS 'https://example.com/wiki/RF-118?rev=2'          <- 'RF-118'

Q7 ranking (rank of the exact-ID document):
  'RF-118'                                       rf-118.md    rank=1  top3=['rf-118.md', 'rf-119.md']
  'RF 118'                                       rf-118.md    rank=2  top3=['rf-119.md', 'rf-118.md']
  'rf118'                                        rf-118.md    rank=None  top3=[]
  'RF–118'                                       rf-118.md    rank=2  top3=['rf-119.md', 'rf-118.md']
  'what is RF-118'                               rf-118.md    rank=1  top3=['rf-118.md', 'rf-119.md']
  'ADR-0004'                                     adr-0004.md  rank=1  top3=['adr-0004.md', 'adr-0040.md']
  'ADR-4'                                        adr-0004.md  rank=2  top3=['adr-0040.md', 'adr-0004.md']
  'ADR 4'                                        adr-0004.md  rank=2  top3=['adr-0040.md', 'adr-0004.md', 'filler-04.md']
  'v2.3.1'                                       v231.md      rank=1  top3=['v231.md', 'v230.md']
  '2.3.1'                                        v231.md      rank=None  top3=[]
  'd3139fdb'                                     sha.md       rank=None  top3=[]
  'd3139fdb8e4a2c1f0b9a7e6d5c4b3a2918f7e6d5'     sha.md       rank=1  top3=['sha.md']
  'bm25f.py'                                     bm25f.md     rank=1  top3=['bm25f.md', 'bm25.md']
  'src/fux/query/bm25f.py'                       bm25f.md     rank=1  top3=['bm25f.md', 'bm25.md']

Q8 cost: {
 "rung": "rung-10000",
 "documents": 10000,
 "tokens": 1305929,
 "distinct_terms": 13625,
 "postings": 975188,
 "whole_form": {
  "distinct": 7862,
  "postings": 61554
 },
 "whole_digit_free": {
  "distinct": 289,
  "postings": 40870,
  "examples": [
   "a-to-z",
   "after-hours",
   "alarm-level",
   "alarm_label",
   "alert-failure",
   "allowed_manual_ack",
   "anjali.deshmukh",
   "api_export",
   "applies_to",
   "approved-record",
   "ashgrove-insure.example",
   "auto-cancelled",
   "back-to-cold",
   "basic_percent",
   "better-known"
  ]
 },
 "whole_changed_by_stemming": {
  "distinct": 0,
  "postings": 0,
  "examples": []
 },
 "docs_with": {
  "unicode_dash_id": 0,
  "colon_prefixed_id": 0,
  "hash_number": 0,
  "hex_7_40": 0,
  "zero_padded_id": 35,
  "unicode_dash_between_alnum": 662
 },
 "families_qualifying_n3_m2": 53,
 "families_letter_prefixed": 43,
 "families_top": [
  {
   "family": "|d-d-d",
   "values": 2264,
   "docs": 7182,
   "examples": [
    "2016-04-04",
    "2019-01-02",
    "2019-01-03",
    "2019-01-04"
   ]
  },
  {
   "family": "|d.d",
   "values": 1407,
   "docs": 1890,
   "examples": [
    "0.15",
    "0.36",
    "0.65",
    "10.1"
   ]
  },
  {
   "family": "ext|/x/d-x-x.x",
   "values": 991,
   "docs": 991,
   "examples": [
    "ext/archive/00005-decision-retired.md",
    "ext/archive/00015-ratecard-retired.md",
    "ext/archive/00025-hours-retired.md",
    "ext/archive/00035-notification-retired.md"
   ]
  },
  {
   "family": "WIKI|-X-d",
   "values": 385,
   "docs": 495,
   "examples": [
    "WIKI-BWD-10",
    "WIKI-BWD-11",
    "WIKI-BWD-12",
    "WIKI-BWD-14"
   ]
  },
  {
   "family": "|d/x",
   "values": 377,
   "docs": 643,
   "examples": [
    "400/hour",
    "401/hour",
    "402/hour",
    "403/hour"
   ]
  },
  {
   "family": "|d.d.d",
   "values": 146,
   "docs": 165,
   "examples": [
    "1.11.2",
    "1.11.4",
    "1.11.6",
    "1.12.1"
   ]
  },
  {
   "family": "BWD|-d",
   "values": 87,
   "docs": 90,
   "examples": [
    "BWD-116",
    "BWD-128",
    "BWD-142",
    "BWD-159"
   ]
  },
  {
   "family": "ZAC|-d",
   "values": 86,
   "docs": 90,
   "examples": [
    "ZAC-100",
    "ZAC-101",
    "ZAC-107",
    "ZAC-128"
   ]
  },
  {
   "family": "NRL|-d",
   "values": 85,
   "docs": 91,
   "examples": [
    "NRL-102",
    "NRL-105",
    "NRL-110",
    "NRL-133"
   ]
  },
  {
   "family": "MBK|-d",
   "values": 77,
   "docs": 80,
   "examples": [
    "MBK-132",
    "MBK-136",
    "MBK-152",
    "MBK-153"
   ]
  },
  {
   "family": "VTX|-d",
   "values": 75,
   "docs": 77,
   "examples": [
    "VTX-102",
    "VTX-104",
    "VTX-117",
    "VTX-123"
   ]
  },
  {
   "family": "HFP|-d",
   "values": 73,
   "docs": 78,
   "examples": [
    "HFP-105",
    "HFP-112",
    "HFP-123",
    "HFP-134"
   ]
  },
  {
   "family": "PCC|-d",
   "values": 73,
   "docs": 77,
   "examples": [
    "PCC-109",
    "PCC-115",
    "PCC-116",
    "PCC-127"
   ]
  },
  {
   "family": "VTX|-X-d",
   "values": 73,
   "docs": 97,
   "examples": [
    "VTX-HSE-16",
    "VTX-HSE-17",
    "VTX-HSE-27",
    "VTX-HSE-32"
   ]
  },
  {
   "family": "NRL|-X-d",
   "values": 72,
   "docs": 102,
   "examples": [
    "NRL-HSE-21",
    "NRL-HSE-25",
    "NRL-HSE-36",
    "NRL-HSE-40"
   ]
  },
  {
   "family": "MBK|-X-d",
   "values": 69,
   "docs": 97,
   "examples": [
    "MBK-F-11",
    "MBK-HSE-11",
    "MBK-HSE-14",
    "MBK-HSE-22"
   ]
  },
  {
   "family": "SFD|-d",
   "values": 67,
   "docs": 69,
   "examples": [
    "SFD-148",
    "SFD-153",
    "SFD-157",
    "SFD-166"
   ]
  },
  {
   "family": "ZAC|-X-d",
   "values": 67,
   "docs": 100,
   "examples": [
    "ZAC-HSE-12",
    "ZAC-HSE-18",
    "ZAC-HSE-27",
    "ZAC-HSE-30"
   ]
  },
  {
   "family": "BWD|-X-d",
   "values": 65,
   "docs": 101,
   "examples": [
    "BWD-HSE-24",
    "BWD-HSE-27",
    "BWD-HSE-39",
    "BWD-HSE-44"
   ]
  },
  {
   "family": "PCC|-X-d",
   "values": 64,
   "docs": 92,
   "examples": [
    "PCC-F-11",
    "PCC-HSE-20",
    "PCC-HSE-28",
    "PCC-HSE-31"
   ]
  },
  {
   "family": "SFD|-X-d",
   "values": 64,
   "docs": 87,
   "examples": [
    "SFD-HSE-10",
    "SFD-HSE-14",
    "SFD-HSE-29",
    "SFD-HSE-36"
   ]
  },
  {
   "family": "CDM|-X-d",
   "values": 62,
   "docs": 85,
   "examples": [
    "CDM-HSE-18",
    "CDM-HSE-19",
    "CDM-HSE-22",
    "CDM-HSE-33"
   ]
  },
  {
   "family": "OKF|-d",
   "values": 59,
   "docs": 66,
   "examples": [
    "OKF-111",
    "OKF-115",
    "OKF-124",
    "OKF-133"
   ]
  },
  {
   "family": "CDM|-d",
   "values": 58,
   "docs": 61,
   "examples": [
    "CDM-111",
    "CDM-130",
    "CDM-160",
    "CDM-192"
   ]
  },
  {
   "family": "HFP|-X-d",
   "values": 58,
   "docs": 85,
   "examples": [
    "HFP-HSE-22",
    "HFP-HSE-62",
    "HFP-HSE-69",
    "HFP-HSE-72"
   ]
  }
 ]
}
