<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti" -->

---
title: Less heap, more speed: Neural sparse search goes native...
description: OpenSearch 3.9 adds a native C++ engine for neural sparse search that stores its forward index in the operating system's page cache instead of the JVM heap. On...
canonical: https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Less heap, more speed: Neural sparse search goes native in OpenSearch 3.9 | daily.dev
og:description: OpenSearch 3.9 adds a native C++ engine for neural sparse search that stores its forward index in the operating system's page cache instead of the JVM heap. On...
og:url: https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti
og:image: https://api.daily.dev/og/posts/HBrMQaLti.png
og:image:alt: Less heap, more speed: Neural sparse search goes native in OpenSearch 3.9
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Less heap, more speed: Neural sparse search goes native in OpenSearch 3.9

**[OpenSearch](https://daily.dev/sources/opensearch)** · 12 min read · 0 upvotes · 0 comments

## Summary

OpenSearch 3.9 adds a native C++ engine for neural sparse search that stores its forward index in the operating system's page cache instead of the JVM heap. On a 138-million-document MS MARCO benchmark across three nodes, it answered queries 6 to 32 times faster than the Lucene engine at matched recall. Lucene needed about 66 GiB of JVM heap per node for the forward index, while the native engine needed none. The native engine also built indexes 2.1 to 3.7 times faster. It offers two forward index layouts, shared and per-block, trading disk space for lower latency and memory use. Enable it with one cluster setting and 'engine': 'native' in the index mapping.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://opensearch.org/blog/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9>

## Questions this post answers

### How much faster is OpenSearch's native neural sparse search engine compared to Lucene at the same recall?

The native engine answers queries 6 to 32 times faster than the Lucene engine at matched recall, tested on 138 million MS MARCO documents across three nodes. At about 0.90 recall, the per-block layout reached 0.38ms p50 latency versus Lucene's 4.90ms. At about 0.96 recall, per-block hit 0.87ms versus Lucene's 28.17ms, a 32.4x speedup.

_Developers tuning search latency at scale can track engine benchmarks like this on daily.dev._

### Does OpenSearch's native sparse search engine require JVM heap memory for its index?

No, the native engine stores its forward index in a file read through the operating system's page cache instead of the JVM heap. This contrasts with the Lucene engine, which used about 66 GiB of JVM heap per node for the forward index on a 138-million-document benchmark. In tests, nodes served shards with just a 4 GiB JVM heap under the native engine.

_Engineers planning memory budgets for search clusters can follow architecture changes like this on daily.dev._

### What is the difference between the shared and per-block forward index layouts in OpenSearch's native sparse search engine?

The shared layout stores each document's vector once in document ID order, using less disk space and building faster, while the per-block layout stores a copy of vectors per block for lower latency and memory use but about 3.4 times more disk space. On 138 million documents, shared used 222 GiB per shard versus 760 GiB for per-block, and per-block kept 0.42ms latency even at a 32 GiB memory limit.

_Teams choosing between latency and disk trade-offs can compare these configurations on daily.dev._

## Similar posts on daily.dev

- [Get to know OpenSearch 3.9](https://daily.dev/posts/get-to-know-opensearch-3-9-qjzsnythj) · OpenSearch · 0 upvotes · 0 comments
- [Scaling Vector Search with OpenSearch](https://daily.dev/posts/scaling-vector-search-with-opensearch-cu8mrge1x) · BigData Boutique blog · 5 upvotes · 0 comments
- [Inside OpenSearch’s bid to become the default AI data layer](https://daily.dev/posts/inside-opensearch-s-bid-to-become-the-default-ai-data-layer-2uzzh37ue) · The New Stack · 2 upvotes · 0 comments
- [Uber Adopts Amazon OpenSearch for Semantic Search to Better Capture User Intent](https://daily.dev/posts/uber-adopts-amazon-opensearch-for-semantic-search-to-better-capture-user-intent-2caemtik8) · InfoQ · 1 upvotes · 0 comments

---

Tags: [#performance](https://daily.dev/tags/performance), [#vector-search](https://daily.dev/tags/vector-search), [#jvm](https://daily.dev/tags/jvm), [#opensearch](https://daily.dev/tags/opensearch)

[View this post on daily.dev](https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Less heap, more speed: Neural sparse search goes native in OpenSearch 3.9","url":"https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti"},"datePublished":"2026-10-29T19:41:21.924Z","dateModified":"2026-10-29T19:42:20.389Z","description":"OpenSearch 3.9 adds a native C++ engine for neural sparse search that stores its forward index in the operating system's page cache instead of the JVM heap. On...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/1a1bfcf3fa8cb64bd98d28a100d7571d?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/1a1bfcf3fa8cb64bd98d28a100d7571d?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"OpenSearch","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"OpenSearch","logo":"https://media.daily.dev/image/upload/s--QsmPuJ8K--/f_auto,q_auto/v1787487638/logos/opensearch-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/opensearch"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,vector-search,jvm,opensearch","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"OpenSearch","item":"https://daily.dev/sources/opensearch"},{"@type":"ListItem","position":3,"name":"Less heap, more speed: Neural sparse search goes native in OpenSearch 3.9"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/less-heap-more-speed-neural-sparse-search-goes-native-in-opensearch-3-9-hbrmqalti#faq","mainEntity":[{"@type":"Question","name":"How much faster is OpenSearch's native neural sparse search engine compared to Lucene at the same recall?","acceptedAnswer":{"@type":"Answer","text":"The native engine answers queries 6 to 32 times faster than the Lucene engine at matched recall, tested on 138 million MS MARCO documents across three nodes. At about 0.90 recall, the per-block layout reached 0.38ms p50 latency versus Lucene's 4.90ms. At about 0.96 recall, per-block hit 0.87ms versus Lucene's 28.17ms, a 32.4x speedup. Developers tuning search latency at scale can track engine benchmarks like this on daily.dev."}},{"@type":"Question","name":"Does OpenSearch's native sparse search engine require JVM heap memory for its index?","acceptedAnswer":{"@type":"Answer","text":"No, the native engine stores its forward index in a file read through the operating system's page cache instead of the JVM heap. This contrasts with the Lucene engine, which used about 66 GiB of JVM heap per node for the forward index on a 138-million-document benchmark. In tests, nodes served shards with just a 4 GiB JVM heap under the native engine. Engineers planning memory budgets for search clusters can follow architecture changes like this on daily.dev."}},{"@type":"Question","name":"What is the difference between the shared and per-block forward index layouts in OpenSearch's native sparse search engine?","acceptedAnswer":{"@type":"Answer","text":"The shared layout stores each document's vector once in document ID order, using less disk space and building faster, while the per-block layout stores a copy of vectors per block for lower latency and memory use but about 3.4 times more disk space. On 138 million documents, shared used 222 GiB per shard versus 760 GiB for per-block, and per-block kept 0.42ms latency even at a 32 GiB memory limit. Teams choosing between latency and disk trade-offs can compare these configurations on daily.dev."}}]}
```

