How Fast Is items-rs? 250 Million Records on One Server

Actual search times for items-rs, Elasticsearch, OpenSearch, Tantivy, and Typesense on the same data and server.

· 3 months ago · Mateusz Rzepa · 8 min read

items-rs is a search engine for counting, filtering and comparing large datasets. One live catalogue holds 250,833,009 domain and company records on one server.

This article shows two separate measurements. The first shows response times from that live 250M-record catalogue. The second compares items-rs, Elasticsearch, OpenSearch, Tantivy and Typesense on the same 8.08M records and the same server.

Results at a glance

  • Four searches on the live 250M-record catalogue stayed below 10 ms at p95.
  • Across 20 matched search tasks, the median speedup was 9.6x over Elasticsearch and 7.6x over OpenSearch. OpenSearch was faster in one task, which remains in the table.
  • In the vector task with the same 0.993 recall, items-rs was 4.6x faster than OpenSearch.

Speed on the live 250M-record catalogue

p50 is the median response time: half of requests are faster and half are slower. p95 is the time within which 95 out of 100 requests finish. A filter count is the number shown beside a filter such as country, category or technology.

We recorded every sample against the live engine. Every p95 result below is under 100 ms.

task median response (p50) 95% of requests finish within (p95)
Text search, without filter counts 1.491 ms 1.918 ms
Filtered company search, without filter counts 1.545 ms 1.817 ms
Filtered company search, including three filter counts 9.171 ms 9.927 ms
Domain autocomplete 1.396 ms 1.757 ms

These times measure the search engine itself. They do not include internet latency, browser work or page rendering.

Same data, same server: all 20 search tests

For the direct comparison, I loaded the same unchanged set of 8,082,243 records into items-rs, Elasticsearch 9.4.3, OpenSearch 3.7.0, Tantivy 0.24 and Typesense 30.2 on the same AMD EPYC server.

This 8.08M-record comparison is separate from the live 250M-record result. It is not a 250M-record head-to-head benchmark. Using the smaller set allowed all five engines to search exactly the same data on one server.

The tests cover three data sizes: all 8.08M records, 339K records from Germany and 1.8M records from the United States.

The table shows the actual median response time for every test. A result is included only when every engine returns the same number of matches and the same filter counts. n/a means that Tantivy was not measured for that test.

All 20 company-search tests - median response time (ms)
items-rsElasticsearchOpenSearchTantivyTypesense
S1 All 8.08M records + 5 filter counts0.19256.98399.74956.31969.74
S2 Germany + 5 filter counts2.7167.0946.8145.8684.93
S3 Germany + 3 categories + 5 filter counts10.2358.2533.7643.91865.74
S4 Germany + Shopify + physical delivery + 5 filter counts9.2856.2139.3126.901114.46
S5 At least 10K monthly visitors + 2 filter counts15.3451.6525.5586.47186.34
S6 Germany + website rank within top 1M + 2 filter counts0.6446.255.163.9124.92
S7 German shops with at least 10K monthly visitors + 5 filter counts17.2418.6313.1823.82653.42
S8 German sites with at least 10K monthly visitors + technology counts3.918.237.647.6669.10
S9 Count German records, without filter counts0.1911.821.810.48856.01
S10 Germany sorted by monthly visitors, page 501.1813.9725.41n/a86.39
S11 All 1.80M US records + 5 filter counts9.73328.11120.93n/a348.21
S12 US city counts, top 505.9167.9941.94n/a260.29
S13 US city counts, top 10,0009.96119.99123.55n/a377.71
S14 US sites with at least 10K monthly visitors, top 50 technologies10.8018.5416.97n/a214.77
S15 Count US records, without filter counts0.2531.571.53n/a258.98
S16 US sorted by monthly visitors, page 500.35515.5547.32n/a349.16
S17 All 8.08M records, top 50 cities0.126178.3327.76n/a521.44
S18 All 8.08M records, top 10,000 cities1.25257.71125.79n/a603.80
S19 US sites with at least 10K monthly visitors, top 50 website systems8.4625.6318.58n/a219.77
S20 US shops with at least 10K monthly visitors + 5 filter counts24.1956.5243.72n/a1000.12

Each row is one search task. Filter counts - often called facets - are the totals shown beside filters such as country, category, e-commerce platform, technology and status. The S1-S20 codes are permanent IDs for each test.

The orange scale is relative within each row: lighter is faster and darker is slower. The printed time is the result; the color only makes the table easier to scan.

The broadest task, S1, searches all 8.08M records and calculates five filter counts. items-rs returns it in 0.192 ms, compared with 56.98 ms for Elasticsearch and 399.74 ms for OpenSearch.

S7 is the visible exception. It filters German shops with at least 10,000 estimated monthly visitors, includes Shopify, WooCommerce and PrestaShop, excludes Magento and Cafe24, and calculates five filter counts. OpenSearch returns it in 13.18 ms, items-rs in 17.24 ms and Elasticsearch in 18.63 ms. The same filters over the larger US segment form S20: items-rs returns it in 24.19 ms, OpenSearch in 43.72 ms and Elasticsearch in 56.52 ms.

Vector search: speed and result quality

Vector search finds records with similar meaning even when their descriptions use different words. We tested it on 333,003 real German e-commerce records. Each record had a vector representation.

Recall shows how many of the true nearest matches the engine found. A recall of 1.000 means that it found all of them.

search task items-rs setting items-rs recall items-rs median time highest competitor recall competitor time at that recall
All domains, top 10 high accuracy 0.995 1.046 ms 0.994 5.76 ms
All domains, top 100 high accuracy 0.997 1.072 ms 0.996 9.07 ms
Shopify, top 10 default 0.995 2.690 ms 0.997 7.292 ms
WooCommerce, top 10 default 0.993 2.606 ms 0.993 11.93 ms

In three of the four tasks, items-rs is faster and finds at least as many of the correct matches as Elasticsearch or OpenSearch.

The Shopify task has a clear trade-off. items-rs is faster, but finds 99.5% of the correct matches instead of 99.7%. The table shows both numbers rather than hiding the difference.

How we kept the comparison fair

  • Every engine ran on the same machine and searched the same unchanged records.
  • Caches were disabled, each engine was warmed up, and every test was repeated.
  • A time is included only when the engine returns the correct number of matches, the same filter counts and, for sorted searches, the same values in the same order. Records with equal values may swap places.
  • For each vector task, the competitor column shows the Elasticsearch or OpenSearch setting with the best recall. If two settings have the same recall, it shows the faster one. Recall and time always come from the same run.
  • items-rs and Tantivy ran inside the benchmark program. Elasticsearch, OpenSearch and Typesense were called through their normal HTTP APIs. This gives the embedded engines a latency advantage, so it is stated here.
  • No row is removed because another engine is faster. The German filtered search in S7, where OpenSearch is faster, remains in the table.

What it means in practice

The whole 250M-record catalogue is served from one machine, not a cluster. On the matched 8.08M-record dataset, the items-rs index is 483 MiB, compared with about 1.9 GiB for Elasticsearch and OpenSearch - roughly 4x smaller. This matched index rebuilds in 75 seconds, at 107K documents per second.

For this workload, items-rs answers in milliseconds while using one server and a smaller index.

What this engine is for

Many search engines are designed to return a short list of results. items-rs is also built to answer broader questions: how many records match, how they split across filters and which segment is larger.

It can calculate those answers and still return individual records. On the live 250M-record catalogue, each next filter or comparison still needs to feel immediate.

The complete table with every measured time is above. If you know an engine that is faster on the same work, I want to benchmark it.

Continue with Semantil

Login now to use the full Semantil workflow:
  • Research markets in plain language with Semantil Agent
  • Save and keep working with reusable company lists
  • Inspect exact company data and filters in Catalog
By login to our system you are accepting Terms & conditions and Privacy Policy